Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 21258|Răspunde: 0

[Sursă] Utilizarea corectă a dinamicii în C#

[Copiază linkul]
Postat pe 07.07.2016 10:15:06 | | |
dinamic este o funcție nouă a FrameWork 4.0. Apariția dinamicii i-a conferit lui C# caracteristicile unui tip de limbaj slab. Compilatorul nu mai verifică tipul la compilare, iar obiectul dinamic suportă implicit orice funcție dorită în timpul compilației. De exemplu, chiar dacă nu știi nimic despre obiectul returnat de metoda GetDynamicObject, poți face un apel de cod de acest fel, iar compilatorul nu va raporta o eroare:




Când vine vorba de utilizarea corectă, trebuie menționată mai întâi o utilizare greșită:

Oamenii folosesc adesea cuvântul cheie var pentru a compara cu dinamicul. De fapt, var și dinamic sunt complet două concepte și nu ar trebui comparate deloc. Odată compilat, timpul de compilare se potrivește automat cu tipul real al variabilei var și înlocuiește declarația variabilei cu tipul real, ceea ce pare că declarăm tipul real la codare. După compilarea dinamică, aceasta este de fapt un tip de obiect, dar compilatorul va face un tratament special pentru tipul dinamic, astfel încât să nu efectueze nicio verificare a tipului în timpul compilației, ci să plaseze verificarea tipului în timpul execuției.

Acest lucru poate fi văzut în fereastra editorului din Visual Studio. Variabilele declarate ca var-uri suportă "smart sense" deoarece Visual Studio poate deduce tipul real de tipuri de var, în timp ce variabilele declarate ca dinamice nu suportă "intelligent sense" deoarece compilatorul nu știe nimic despre tipul de runtime al său. Folosirea Intelligent Sense pentru variabile dinamice solicită "Această acțiune va fi rezolvată la rulare".

Faptul că variabila dinamică este o variabilă obiect poate fi verificat prin codul IL, iar codul IL nu va fi postat aici. Desigur, compilatorul gestionează și declarațiile dinamice pentru a distinge între variabilele obiect directe.

dinamica este redată pe scară largă în MSDN pentru a simplifica interoperabilitatea, iar eu consider că pe baza acestui lucru unii dezvoltatori sunt neînțelese: deoarece mulți dezvoltatori nu știu să folosească coduri precum COM+ și dezvoltarea secundară OFFICE, au nevoie urgentă de un motiv de aplicare dinamică. Așadar, în dezvoltarea zilnică, cred că dinamica este valoroasă:

Conversia tipului
Tranziția între instanțe de tip Dynamic și alte tipuri de instanțe este simplă, iar dezvoltatorii pot comuta cu ușurință între comportamente dinamice și non-dinamice. Orice instanță poate fi convertită implicit într-o instanță de tip dinamic, vezi următorul exemplu:
dinamic d1 = 7;
dinamic d2 = "o coardă";
dinamic d3 = System.DateTime.Today;
dinamic d4 = System.Diagnostics.Process.GetProcesses();
În schimb, o conversie implicită poate fi aplicată dinamic oricărei expresii de tip dinamic.
Și invers, orice expresie a dinamicii de tip poate fi convertită implicit în alte tipuri.
int i = d1;
string str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;
Problema suprasarcinii cu parametrii dinamici de tip în metodă
Dacă o metodă este numită "
DLR în timp de execuție dinamic pentru limbaj
Runtime-ul dinamic al limbajului este . NET Framework 4 Beta 1 este un nou set de API-uri care oferă suport pentru tipuri dinamice în C# și implementează, de asemenea, limbaje de programare dinamice precum IronPython și IronRuby.
dinamica simplifică reflexiile.

Anterior foloseam astfel de reflecții:



Acum avem o modalitate simplificată de a scrie:


Poate că ignorăm o astfel de simplificare, până la urmă, se pare că codul nu a fost redus prea mult, dar dacă luăm în considerare cele două caracteristici, eficiența și frumusețea, atunci avantajele dinamicii sunt evidente. Compilatorul optimizează dinamica pentru a fi mult mai rapidă decât eficiența reflexiei necachedate. Dacă trebuie să compari, poți rula codul celor două de mai sus (partea cu metoda Adunării apelului) pentru 1000000 pentru a trage o concluzie.






Precedent:mvc preia datele JSON XML pentru post
Următor:A apărut o eroare de recunoaștere. Aproape de Linia 1, coloana 10
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com