dinaminis yra nauja "FrameWork 4.0" funkcija. Dinamikos atsiradimas suteikė C# silpno kalbos tipo ypatybes. Kompiliatorius nebetikrina tipo kompiliavimo metu, o dinaminis objektas kompiliavimo metu palaiko bet kokią norimą funkciją pagal numatytuosius nustatymus. Pavyzdžiui, net jei nieko nežinote apie objektą, kurį grąžina metodas GetDynamicObject, galite atlikti tokį kodo iškvietimą ir kompiliatorius nepraneš apie klaidą:
Kalbant apie teisingą vartojimą, pirmiausia reikėtų atkreipti dėmesį į vieną neteisingą vartojimą:
Žmonės dažnai naudoja raktinį žodį var, kad palygintų su dinaminiu. Tiesą sakant, var ir dinamika yra visiškai dvi sąvokos ir jų visai nereikėtų lyginti. Kompiliuojant kompiliavimo laikas automatiškai sutampa su tikruoju var kintamojo tipu ir pakeičia kintamojo deklaraciją tikruoju tipu, kuris atrodo taip, lyg koduodami deklaruojame tikrąjį tipą. Po dinaminio kompiliavimo, tai iš tikrųjų yra objekto tipas, tačiau kompiliatorius specialiai apdoros dinaminį tipą, kad kompiliavimo metu neatliktų jokio tipo tikrinimo, o atliktų tipo tikrinimą vykdymo metu.
Tai galima pamatyti "Visual Studio" redaktoriaus lange. Kintamieji, deklaruoti kaip vars, palaiko "intelektualų pojūtį", nes "Visual Studio" gali nustatyti tikrąjį var tipų tipą, o kintamieji, paskelbti kaip dinaminiai, nepalaiko "intelektualaus pojūčio", nes kompiliatorius nieko nežino apie jo vykdymo laiko tipą. Naudojant "Intelligent Sense" dinaminiams kintamiesiems, rodomi raginimai "Šis veiksmas bus išspręstas vykdymo metu".
Tai, kad dinaminis kintamasis yra objekto kintamasis, galima patikrinti IL kodu, o IL kodas čia nebus paskelbtas. Žinoma, kompiliatorius taip pat tvarko dinamines deklaracijas, kad atskirtų tiesioginius objekto kintamuosius.
dinaminis yra plačiai atvaizduojamas MSDN, siekiant supaprastinti sąveiką, ir manau, kad būtent dėl to kai kurie kūrėjai yra neteisingai suprantami: kadangi daugelis kūrėjų nežino, kaip naudoti kodavimą, pvz., COM+ ir OFFICE antrinį kūrimą, jiems skubiai reikia dinaminės programos priežasties. Taigi, kasdieniame tobulėjime, manau, kad dinamika yra vertinga:
Tipo konvertavimas Perėjimas tarp dinaminio tipo egzempliorių ir kitų tipų egzempliorių yra paprastas, o kūrėjai gali lengvai perjungti dinaminį ir nedinaminį elgesį. Bet kurį egzempliorių galima netiesiogiai konvertuoti į dinaminio tipo egzempliorių, žr. šį pavyzdį: dinaminis d1 = 7; dinaminis d2 = "eilutė"; dinaminis d3 = System.DateTime.Today; dinaminis d4 = System.Diagnostics.Process.GetProcesses(); Ir atvirkščiai, numanoma konversija gali būti dinamiškai taikoma bet kuriai dinaminio tipo išraiškai. Ir atvirkščiai, bet kokia dinaminio tipo išraiška taip pat gali būti netiesiogiai konvertuojama į kitus tipus. int i = d1; eilutė str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4; Perkrovos problema su dinaminio tipo parametrais metode Jei metodas vadinamas praeina dinaminio tipo objektą arba iškviečiamas objektas yra dinaminio tipo, tada perkrovos sprendimas įvyksta vykdymo metu, o ne kompiliavimo metu. Dinaminės kalbos vykdymo DLR Dinaminės kalbos vykdymo laikas yra . NET Framework 4 Beta 1 yra naujas API rinkinys, kuris palaiko dinaminius tipus C# ir taip pat įgyvendina dinamines programavimo kalbas, tokias kaip IronPython ir IronRuby. Dinamika supaprastina atspindžius.
Anksčiau mes naudojome tokius atspindžius:
Dabar turime supaprastintą rašymo būdą:
Mes galime atmesti tokį supaprastinimą, juk atrodo, kad kodas nebuvo labai sumažintas, tačiau jei atsižvelgsime į dvi efektyvumo ir grožio savybes, tada dinamikos pranašumai yra akivaizdūs. Kompiliatorius optimizuoja dinaminį, kad būtų daug greitesnis nei netalpyklos atspindžio efektyvumas. Jei turite palyginti, galite paleisti pirmiau minėtų dviejų kodą (iškvietimą Pridėti metodo dalį) 1000000, kad padarytumėte išvadą.
|