C# 4.0 ievieš jaunu tipu: dinamisks, kas ir statisks tips, bet šāda tipa objekta instance spēj apiet statiskā tipa pārbaudes procesu. Vairumā gadījumu tips darbojas kā objektu klase. Kompilācijas laikā dinamiskās klases instance atbalsta jebkuru darbību, tāpēc nav jāuztraucas par to, vai objekts ir ņemts no COM API vai dinamiskas valodas, piemēram, IronPython, no HTML DOM, vai no atspoguļojuma, vai kaut kur citur programmā. Tomēr, ja kods dara kaut ko nederīgu, kļūda tiek uztverta izpildes laikā. Piemēram, piemēra metode exampleMethod1 šajā koda fragmentā ir tikai viens parametrs, un kompilators var identificēt, ka tas nav derīgs, izsaucot ec.exampleMethod1(10,4) kompilācijas laikā; Tā ir kompilācijas kļūda. Otrais izsaukums dynamic_ec.exampleMethod1(10,4) netiek pārbaudīts, vai nav statisku tipu. Tāpēc kompilators neziņo par kompilācijas kļūdām. Tomēr kļūda neslēpjas mūžīgi; Tas tiks noķerts izpildlaikā un aktivizēs izpildlaika izņēmumu. statisks void Main(string[] args){ ExampleClass ec = jauns ExampleClass(); dinamiskais dynamic_ec = jauns ExampleClass(); dynamic_ec.piemērs1. metode(10, 4); dynamic_ec.someMethod("kāds arguments", 7, null); dynamic_ec.nonexistentMethod();
} klase ExampleClass { public ExampleClass() { } public ExampleClass(int v) { } publiskās anulēšanas piemērsMetode1(int i) { } public void exampleMethod2(string str) { }
} Šeit ir piemērs, kā izmantot dinamiku, lai izsauktu IronPython:
izmantojot IronPython.Hosting; izmantojot Microsoft.scrip{filtering}ting. Hostings;
Console.WriteLine("Ielāde random.py..."); scrip{filter}tRuntime py = Python.CreateRuntime(); dinamisks nejaušs = py. UseFile("random.py"); Console.WriteLine("random.py ielādēts!"); var items = Enumerable.Range(1, 7). ToArray();
for (int s = 0; s < 10000; s++) { random.shuffle(vienumi); Console.Write("Secības {0}: ", s); foreach (int i vienumos) { Console.Write("{0} ", i); } Console.WriteLine();
}
Dinamiskiem objektiem vai izteiksmēm kompilatora uzdevums ir iekapsulēt darbības, kas jāveic katrai izteiksmei, un izpildes laikā pārbaudīt saglabāto informāciju, un visi nederīgie priekšraksti aktivizēs izpildlaika izņēmumu. Arī lielākās daļas dinamisko operāciju rezultāta veids ir dinamisks. Piemēram, ja nākamajā piemērā novietojat peles rādītāju virs testSum, viedā uzvedne parādīs (lokālo mainīgo) dinamisko testSum. dinamiskais d = 1; var testSum = d + 3; Novietojiet peles rādītāju virs zemāk esošās testSum. System.Console.WriteLine(testSum);
Tipa konvertēšana Pāreja starp dinamiskā tipa instancēm un cita veida instancēm ir vienkārša, un izstrādātāji var viegli pārslēgties starp dinamisku un nedinamisku uzvedību. Jebkuru instanci var netieši pārvērst par dinamiska tipa instanci, skatiet šo piemēru: dinamiskais d1 = 7; dinamiskais d2 = "virkne"; dinamiskais d3 = System.DateTime.Today; dinamiskais d4 = System.Diagnostics.Process.GetProcesses();
Un otrādi, netiešo konversiju var dinamiski piemērot jebkurai dinamiskā tipa izteiksmei. Un otrādi, jebkuru tipa dinamikas izteiksmi var arī netieši pārvērst citos tipos. int i = d1; virkne str = d2; DatumsLaiks dt = d3; System.Diagnostics.Process[] procs = d4;
Pārslodzes problēma ar dinamiskā tipa parametriem metodē Ja metode tiek saukta par dinamiska tipa objektu vai izsauktais objekts ir dinamisks, tad spriedums par pārslodzi notiek izpildlaikā, nevis kompilācijas laikā.
Dinamiskās valodas izpildlaika DLR Dinamiskās valodas izpildlaiks ir . NET Framework 4 Beta 1 ir jauns API kopums, kas nodrošina atbalstu dinamiskiem tipiem C#, kā arī ievieš dinamiskās programmēšanas valodas, piemēram, IronPython un IronRuby.
COM sadarbspēja C# 4.0 ietver vairākas funkcijas, kas uzlabo sadarbspēju ar tradicionālajām COM API saskarnēm, piemēram, Office automatizāciju. Dinamiskie tipi, nosauktie parametri un neobligātie parametri ir arī daļa no uzlabojumiem. Daudzas COM metodes ļauj to parametriem un atgrieztajām vērtībām būt objekta tipam, tāpēc stipri ierakstītām valodām, piemēram, C#, ir nepieciešama daudz piespiedu tipa konvertēšanas. Tomēr C# 4.0, ja kompilācijas laikā pievienojat opciju /link, dinamiskajam tipam ir jauns efekts: tas padara objekta tipu (parametra tipu vai atgriešanās tipu) COM interfeisa metodes parakstā par dinamisku, tādējādi izvairoties no lielas tipa konvertēšanas. Piemēram, šis apgalvojums tam ir pretstats. Tas netiek izmantots dinamisks. ((Excel.Range)excel. Šūnas[1, 1]). Value2 = "Nosaukums"; Excel.Range diapazons = (Excel.Range)excel. Šūnas[1, 1];
Tas bija dinamisks. Izcelties. Šūnas[1, 1]. Vērtība = "Vārds"; Excel.Diapazona diapazons = excel. Šūnas[1, 1]; |