Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 21258|Svar: 0

[Kilde] Korrekt brug af dynamisk i C#

[Kopier link]
Opslået på 07/07/2016 10.15.06 | | |
dynamisk er en ny funktion i FrameWork 4.0. Fremkomsten af dynamisk har givet C# karakteristika for en svag sprogtype. Kompilatoren tjekker ikke længere typen ved kompilering, og det dynamiske objekt understøtter som standard enhver funktion, du ønsker, under kompileringstiden. For eksempel, selvom du ikke ved noget om objektet, som GetDynamicObject-metoden returnerer, kan du lave et kodekald som dette, og compileren vil ikke rapportere en fejl:




Når det gælder korrekt brug, bør én forkert brug først påpeges:

Folk bruger ofte nøgleordet var til at sammenligne med dynamisk. Faktisk er var og dynamisk fuldstændig to begreber og bør slet ikke sammenlignes. Når den er kompileret, matcher kompileringstiden automatisk den faktiske type af var-variablen og erstatter variablens deklaration med den faktiske type, hvilket ser ud som om, vi erklærer den faktiske type ved kodning. Efter dynamisk kompilering er det faktisk en objekttype, men compilatoren vil foretage en særlig behandling af den dynamiske type, så den ikke udfører nogen typekontrol under kompileringen, men placerer typekontrollen i runtime.

Dette kan ses i editor-vinduet i Visual Studio. Variabler erklæret som vars understøtter "intelligent sense", fordi Visual Studio kan udlede den faktiske type var-typer, mens variabler erklæret som dynamiske ikke understøtter "intelligent sense", fordi compileren intet ved om typen af sin runtime. Ved brug af Intelligent Sense til dynamiske variabler vises prompt: "Denne handling vil blive løst ved kørsel".

Det faktum, at den dynamiske variabel er en objektvariabel, kan verificeres af IL-koden, og IL-koden vil ikke blive offentliggjort her. Selvfølgelig håndterer compileren også dynamiske deklarationer for at skelne mellem direkte objektvariabler.

dynamisk er bredt gengivet i MSDN for at forenkle interoperabiliteten, og jeg føler, at det er på baggrund af dette, at nogle udviklere bliver misforstået: fordi mange udviklere ikke ved, hvordan man bruger kodning som COM+ og OFFICE sekundær udvikling, har de akut brug for en dynamisk applikationsbegrundelse. Så i den daglige udvikling mener jeg, at dynamik er værdifuldt:

Typekonvertering
Overgangen mellem dynamiske instanser og andre typer instanser er simpel, og udviklere kan nemt skifte mellem dynamiske og ikke-dynamiske adfærdsfunktioner. Enhver instans kan implicit konverteres til en dynamisk type instans, se følgende eksempel:
dynamisk d1 = 7;
dynamisk d2 = "en streng";
dynamisk d3 = System.DateTime.Today;
dynamisk d4 = System.Diagnostik.Proces.GetProcess();
Omvendt kan en implicit konvertering dynamisk anvendes på ethvert udtryk af typen dynamisk.
Og omvendt kan ethvert udtryk af typen dynamisk også implicit konverteres til andre typer.
int i = d1;
streng str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;
Overbelastningsproblem med dynamiske typeparametre i metoden
Hvis en metode kaldes passerer et objekt af typen dynamisk, eller det objekt, der kaldes, er af typen dynamisk, så sker vurderingen af overbelastning under kørsel og ikke ved kompileringstidspunktet.
Dynamisk sprog-runtime DLR
Den dynamiske sprog-runtime er . NET Framework 4 Beta 1 er et nyt sæt API'er, der understøtter dynamiske typer i C# og også implementerer dynamiske programmeringssprog som IronPython og IronRuby.
Dynamik forenkler refleksioner.

Tidligere brugte vi refleksioner som denne:



Nu har vi en forenklet måde at skrive på:


Vi kan være afvisende over for en sådan forenkling, for det ser ud til, at koden ikke er blevet reduceret meget, men hvis vi tager de to karakteristika effektivitet og skønhed i betragtning, er fordelene ved dynamisk åbenlyse. Kompilatoren optimerer dynamisk til at være meget hurtigere end ucachet refleksionseffektivitet. Hvis du skal sammenligne, kan du køre koden fra de to ovenstående (kaldet Add-metoden) for 1000000 for at drage en konklusion.






Tidligere:mvc henter JSON XML-dataene til posten
Næste:Der opstod en genkendelsesfejl. nær linje 1, kolonne 10
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com