dinamičnost je nova funkcija FrameWork 4.0. Pojav dinamike je C# dal značilnosti šibkega jezikovnega tipa. Prevajalnik med prevajanjem ne preverja več tipa, dinamični objekt pa privzeto podpira katerokoli funkcijo, ki jo želite med prevajanjem. Na primer, tudi če ne veste ničesar o objektu, ki ga vrne metoda GetDynamicObject, lahko izvedete takšen klic kode in prevajalnik ne bo poročal o napaki:
Ko gre za pravilno uporabo, je treba najprej opozoriti na eno napačno uporabo:
Ljudje pogosto uporabljajo ključno besedo var za primerjavo z dinamičnim. Pravzaprav sta var in dinamika povsem dva pojma in ju sploh ne smemo primerjati skupaj. Ko je prevajanje, se čas prevajanja samodejno ujema z dejanskim tipom var spremenljivke in zamenja deklaracijo spremenljivke z dejanskim tipom, kar izgleda, kot da deklariramo dejanski tip pri kodiranju. Po dinamičnem prevajanju je to dejansko objektni tip, vendar prevajalnik posebej obravnava dinamični tip, tako da med prevajanjem ne izvaja preverjanja tipov, temveč ga postavi v čas izvajanja.
To je mogoče videti v oknu urejevalnika v Visual Studiu. Spremenljivke, označene kot var, podpirajo "inteligentni pomen", ker Visual Studio lahko sklepa dejanski tip var tipov, medtem ko spremenljivke, označene kot dinamične, ne podpirajo "inteligentnega smisla", ker prevajalnik ne ve ničesar o tipu svojega izvajanja v času. Uporaba Intelligent Sense za dinamične spremenljivke sproži "To dejanje bo rešeno med izvajanjem".
Dejstvo, da je dinamična spremenljivka objektna spremenljivka, je mogoče preveriti z IL kodo, IL koda pa tukaj ne bo objavljena. Seveda prevajalnik obravnava tudi dinamične deklaracije za razlikovanje med neposrednimi objektnimi spremenljivkami.
dinamičnost je široko upodobljena v MSDN za poenostavitev interoperabilnosti, in menim, da so nekateri razvijalci na tej podlagi napačno razumljeni: ker mnogi razvijalci ne znajo uporabljati kode, kot sta sekundarni razvoj COM+ in OFFICE, nujno potrebujejo razlog za dinamično aplikacijo. Torej, v vsakodnevnem razvoju menim, da je dinamika dragocena:
Predelava tipa Prehod med dinamičnimi in drugimi vrstami primerkov je preprost, razvijalci pa lahko enostavno preklapljajo med dinamičnimi in nedinamičnimi vedenji. Vsak primer je mogoče implicitno pretvoriti v primer dinamičnega tipa, glej naslednji primer: dinamični d1 = 7; dinamični d2 = "niz"; dinamični d3 = System.DateTime.Today; dynamic d4 = System.Diagnostics.Process.GetProcesses(); Nasprotno pa se implicitna pretvorba lahko dinamično uporabi na katerikoli izraz dinamičnega tipa. In obratno, vsak izraz tipa dinamično je mogoče implicitno pretvoriti v druge tipe. int i = d1; niz str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4; Problem preobremenitve z dinamičnimi tipnimi parametri v metodi Če je metoda poklicana kot predmet tipa dinamični ali če je klicani objekt tipa dinamični, se presoja preobremenitve zgodi med izvajanjem in ne med prevajanjem. Dinamični jezikovni izvajalni DLR Dinamični čas izvajanja jezika je . NET Framework 4 Beta 1 je nov nabor API-jev, ki podpirajo dinamične tipe v C# in prav tako implementirajo dinamične programske jezike, kot sta IronPython in IronRuby. dinamično poenostavi odseve.
Prej smo uporabljali odseve, kot je ta:
Zdaj imamo poenostavljen način pisanja:
Morda bomo takšno poenostavitev zavrnili, saj se zdi, da koda ni bila bistveno zmanjšana, a če upoštevamo dve lastnosti učinkovitosti in lepote, so prednosti dinamike očitne. Prevajalnik optimizira dinamičnost tako, da je bistveno hitrejša od učinkovitosti nepredpomnjenega odboja. Če morate primerjati, lahko zaženete kodo zgoraj omenjenih dveh (klic Add method del) za 10000000, da potegnete zaključek.
|