|
|
Zveřejněno 07.07.2016 10:15:06
|
|
|

dynamická je nová funkce FrameWork 4.0. Vznik dynamiky dal C# charakteristiky slabého jazykového typu. Kompilátor již při kompilaci nekontroluje typ a dynamický objekt ve výchozím nastavení podporuje jakoukoli požadovanou funkce během kompilace. Například i když o objektu vráceném metodou GetDynamicObject nic nevíte, můžete takto provést volání kódu a kompilátor chybu nenahlásí:
Pokud jde o správné použití, je třeba nejprve upozornit na jedno špatné použití:
Lidé často používají klíčové slovo var k porovnání s dynamickým. Ve skutečnosti jsou var a dynamika zcela dva pojmy a neměly by se vůbec srovnávat. Po kompilaci čas kompilace automaticky odpovídá skutečnému typu proměnné var a nahradí deklaraci proměnné skutečným typem, což vypadá, jako bychom deklarovali skutečný typ při kódování. Po dynamickém zkompilování je to ve skutečnosti objektový typ, ale kompilátor s dynamickým typem zachází zvlášť, takže během kompilace neprovádí žádnou kontrolu typu, ale umístí kontrolu typu do běhu času.
To je vidět v okně editoru ve Visual Studiu. Proměnné deklarované jako vars podporují "inteligentní smysl", protože Visual Studio dokáže odvodit skutečný typ varových typů, zatímco proměnné deklarované jako dynamické "inteligentní smysl" nepodporují, protože kompilátor nic neví o typu svého runtime. Použití Intelligent Sense pro dynamické proměnné vyzve "Tato akce bude vyřešena za běhu".
Fakt, že dynamická proměnná je objektová proměnná, lze ověřit IL kódem, a IL kód zde nebude zveřejněn. Samozřejmě kompilátor také zpracovává dynamické deklarace pro rozlišení mezi přímými objektovými proměnnými.
dynamické je v MSDN široce vykreslováno, aby se zjednodušila interoperabilita, a mám pocit, že právě na tomto základě jsou někteří vývojáři nepochopeni: protože mnoho vývojářů neumí používat kódování jako COM+ a sekundární vývoj v OFFICE, naléhavě potřebují důvod pro dynamickou aplikaci. Takže v každodenním vývoji si myslím, že dynamika je cenná:
Typová konverze Přechod mezi dynamickými typovými instancemi a jinými typy instancí je jednoduchý a vývojáři mohou snadno přepínat mezi dynamickým a nedynamickým chováním. Každou instanci lze implicitně převést na instanci dynamického typu, viz následující příklad: dynamické d1 = 7; dynamické d2 = "struna"; dynamické d3 = System.DateTime.Today; dynamic d4 = System.Diagnostics.Process.GetProcesses(); Naopak implicitní převod lze dynamicky aplikovat na jakýkoli výraz typu dynamic. A naopak, jakýkoli výraz typu dynamic lze implicitně převést na jiné typy. int i = d1; struna str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4; Problém přetížení s dynamickými typovými parametry v metodě Pokud je metoda volána jako objekt typu dynamic, nebo je volán objekt typu dynamic, pak se rozhodnutí o přetížení provádí za běhu a nikoli při kompilaci. Dynamický jazyk pro běh v běhu Dynamické běhací doba jazyka je . NET Framework 4 Beta 1 je nová sada API, která podporuje dynamické typy v C# a také implementuje dynamické programovací jazyky jako IronPython a IronRuby. Dynamické zjednodušuje odrazy.
Dříve jsme používali odrazy takto:
Nyní máme zjednodušený způsob, jak napsat:
Můžeme takové zjednodušení odmítat, koneckonců se zdá, že kód nebyl příliš zmenšen, ale pokud vezmeme v úvahu dvě charakteristiky efektivity a krásy, pak jsou výhody dynamiky zřejmé. Kompilátor optimalizuje dynamiku tak, aby byla mnohem rychlejší než efektivita necacheovaných reflexí. Pokud musíte porovnat, můžete spustit kód těchto dvou (volání Add method část) na 1000000 a udělat závěr.
|
Předchozí:mvc načítá JSON XML data pro příspěvekDalší:Došlo k chybě rozpoznávání. Blízko řádku 1, sloupec 10
|