dynaaminen on uusi ominaisuus FrameWork 4.0:ssa. Dynaamisen synty on antanut C#:lle heikon kielityypin ominaisuudet. Kääntäjä ei enää tarkista tyyppiä käännösaikana, ja dynaaminen objekti tukee oletuksena mitä tahansa haluttua ominaisuutta käännösajan aikana. Esimerkiksi, vaikka et tietäisi mitään GetDynamicObject-metodin palauttamasta objektista, voit tehdä koodikutsun näin, eikä kääntäjä raportoi virhettä:
Kun kyse on oikeasta käytöstä, tulisi ensin osoittaa yksi väärä käyttö:
Ihmiset käyttävät usein avainsanaa var vertaillakseen dynamiikkaan. Itse asiassa VAR ja dynaaminen ovat täysin kaksi käsitettä, eikä niitä pitäisi verrata yhteen lainkaan. Kun käännösaika on käännetty, käännösaika vastaa automaattisesti var-muuttujan todellista tyyppiä ja korvaa muuttujan määritelmän varsinaisella tyypillä, mikä näyttää siltä, että määritämme varsinaisen tyypin koodauksessa. Kun dynaaminen on käännetty, se on itse asiassa objektityyppi, mutta kääntäjä käsittelee dynaamista tyyppiä erityisesti, jotta se ei tee tyypin tarkistusta kääntämisen aikana, vaan laittaa tyyppitarkistuksen ajonaikaan.
Tämä näkyy Visual Studion editori-ikkunassa. VAR:iksi ilmoitetut muuttujat tukevat "älykästä aistia", koska Visual Studio voi päätellä var-tyyppien todellisen tyypin, kun taas dynaamisiksi ilmoitetut muuttujat eivät tue "älykästä aistia", koska kääntäjä ei tiedä mitään suoritusaikansa tyypistä. Intelligent Sensin käyttäminen dynaamisille muuttujille antaa kysymyksen "Tämä toimenpide ratkaistaan ajonaikaisesti".
Se, että dynaaminen muuttuja on objektimuuttuja, voidaan varmistaa IL-koodilla, eikä IL-koodia julkaista täällä. Tietenkin kääntäjä käsittelee myös dynaamisia määrittelyjä erottaakseen suorat objektimuuttujat.
Dynaaminen renderöidään laajasti MSDN:ssä yhteentoimivuuden helpottamiseksi, ja koen, että juuri tästä syystä jotkut kehittäjät ymmärretään väärin: koska monet kehittäjät eivät osaa käyttää koodausta, kuten COM+ ja OFFICE-toissijainen kehitys, he tarvitsevat kiireellisesti dynaamisen sovelluksen syyn. Joten päivittäisessä kehityksessä dynamiikka on arvokasta:
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. Dynaaminen yksinkertaistaa heijastuksia.
Aiemmin käytimme tällaisia pohdintoja:
Nyt meillä on yksinkertaistettu tapa kirjoittaa:
Saatamme vähätellä tällaista yksinkertaistamista, sillä näyttää siltä, ettei koodia ole vähennetty paljon, mutta jos otamme huomioon tehokkuuden ja kauneuden, dynaamisen edut ovat ilmeisiä. Kääntäjä optimoi dynaamisen paljon nopeammaksi kuin välimuistiton heijastustehokkuus. Jos sinun täytyy verrata, voit ajaa edellä mainittujen kahden koodin (kutsu Add method -osa) 1000000:lle saadaksesi johtopäätöksen.
|