|
|
Julkaistu 7.7.2016 10.23.00
|
|
|

C# 4.0 esittelee uuden tyypin: dynaamisen, joka on staattinen tyyppi, mutta tämän tyyppinen objekti-instanssi pystyy ohittamaan staattisen tyypin tarkistusprosessin. Useimmissa tapauksissa tyyppi toimii kuin objektiluokka. Käännösvaiheessa dynaamisen luokan instanssi tukee mitä tahansa operaatiota, joten ei tarvitse huolehtia siitä, onko objekti otettu COM-rajapinnasta, dynaamisesta kielestä kuten IronPython, HTML DOM:sta, heijastuksesta vai jostain muualta ohjelmassa. Jos koodi kuitenkin tekee jotain virheellistä, virhe havaitaan ajonaikaisesti. Esimerkiksi esimerkkimetodi exampleMethod1 seuraavassa koodipätkässä sisältää vain yhden parametrin, ja kääntäjä voi tunnistaa, että se on virheellinen kutsuttaessa ec.exampleMethod1(10,4) käännösvaiheessa; Tämä on kokoelmavirhe. Toinen kutsu dynamic_ec.exampleMethod1(10,4) ei ole tarkistettu staattisilta tyypeiltä. Siksi kääntäjä ei raportoi käännösvirheitä. Kuitenkin ötökkä ei piiloudu ikuisesti; Se havaitaan ajonaikaisesti ja käynnistää ajonaikaisen poikkeuksen. static void Main(string[] args){ ExampleClass ec = uusi ExampleClass(); dynaaminen dynamic_ec = uusi ExampleClass(); dynamic_ec.exampleMethod1(10, 4); dynamic_ec.someMethod("jokin argumentti", 7, null); dynamic_ec.nonexistentMethod();
} class ExampleClass { public ExampleClass() { } public ExampleClass(int v) { } public void exampleMethod1(int i) { } public void exampleMethod2(string str) { }
} Tässä esimerkki dynaamisen käytöstä IronPythonin kutsumiseen:
käyttää IronPython.Hostingia; käyttäen Microsoft.scrip{filtering}ting. Juontaja;
Console.WriteLine("Lataa random.py..."); scrip{filter}tRuntime py = Python.CreateRuntime(); dynaaminen satunnainen = py. UseFile("random.py"); Console.WriteLine("random.py ladattu!"); var items = Enumerable.Range(1, 7). ToArray();
kun (int s = 0; s < 10000; s++) { random.shuffle(esineet); Console.Write("Sequence {0}: ", s); foreach (int i esineissä) { Console.Write("{0} ", i); } Console.WriteLine();
}
Tyyppidynaamisen objektien tai lausekkeiden kohdalla kääntäjän tehtävänä on kapseloida kunkin lausekkeen odotetut toiminnot ja suorittaa tallennetut tiedot, jolloin virheelliset lausekkeet laukaisevat ajonaikaisen poikkeuksen. Useimpien dynaamisten operaatioiden tulostyyppi on myös dynaaminen. Esimerkiksi, jos viet hiiren osoittimen testSumin päälle seuraavassa esimerkissä, älykehote näyttää (paikallisen muuttujan) dynaamisen testSumin. dynaaminen d = 1; var testSum = d + 3; Vie hiiren osoitin alla olevan testSumin päälle. System.Console.WriteLine(testSum);
Tyyppimuunnos Siirtyminen dynaamisten tyyppisten instanssien ja muiden instanssityyppien välillä on helppoa, ja kehittäjät voivat helposti vaihtaa dynmisen ja ei-dynaamisen käyttäytymisen välillä. Mikä tahansa instanssi voidaan implisiittisesti muuntaa dynaamiseksi tyyppiseksi instanssiksi, katso seuraava esimerkki: dynaaminen d1 = 7; dynaaminen d2 = "merkkijono"; dynaaminen d3 = System.DateTime.Today; dynaaminen d4 = System.Diagnostics.Process.GetProcesses();
Vastaavasti implisiittinen muunnos voidaan dynaamisesti soveltaa mihin tahansa tyyppidynaamiseen lausekkeeseen Ja päinvastoin, mikä tahansa tyyppidynaamisen lauseke voidaan myös implisiittisesti muuntaa muiksi tyypeiksi. int i = d1; string str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4;
Ylikuormitusongelma dynaamisilla tyyppiparametreilla menetelmässä Jos metodia kutsutaan ohittamaan dynaamisen tyyppisen objektin tai kutsuttava objekti on dynaamisen tyyppi, ylikuormituksen arviointi tapahtuu ajonaikaisesti eikä käännösaikana.
Dynaamisen kielen ajonaikainen DLR Dynaaminen kieliajonaika on . NET Framework 4 Beta 1 on uusi API-sarja, joka tukee dynaamisia tyyppejä C#:ssa ja toteuttaa myös dynaamisia ohjelmointikieliä kuten IronPython ja IronRuby.
COM-yhteensopivuus C# 4.0 sisältää useita ominaisuuksia, jotka parantavat yhteensopivuutta perinteisten COM API -rajapintojen kanssa, kuten Office-automaatio. Dynaamiset tyypit, nimetyt parametrit ja valinnaiset parametrit ovat myös osa parannusta. Monet COM-menetelmät sallivat parametrien ja palautusarvojen olla tyyppiobjektin mukaisia, joten vahvasti tyypitetyissä kielissä, kuten C#:ssa, vaaditaan paljon pakotettua tyyppimuunnosta. Kuitenkin C# 4.0:ssa, jos lisäät /link-vaihtoehdon käännösvaiheessa, dynaamisella tyypillä on uusi vaikutus: se tekee COM-rajapinnan metodiallekirjoituksen objektityypistä (parametrityyppi tai palautustyyppi) dynaamisen, mikä välttää paljon tyyppimuunnoksen. Esimerkiksi seuraava väite vertaa tätä. Sitä ei käytetä dynaamisessa. ((Excel.Range)excel. Solut[1, 1]). Value2 = "Nimi"; Excel.Range = (Excel.Range)excel. Solut[1, 1];
Se oli dynaaminen kokemus. Excel. Solut[1, 1]. Arvo = "Nimi"; Excel.Range range = excel. Solut[1, 1]; |
Edellinen:MVC AJAX. BeginForm()-sivu lähetetään asynkronisestiSeuraava:eri objekti, jolla oli sama tunnistearvo, oli jo liitetty...
|