See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 18548|Vastuse: 0

[Allikas] Dünaamika kasutamine C# 4.0-s

[Kopeeri link]
Postitatud 07.07.2016 10:23:00 | | |
C# 4.0 tutvustab uut tüüpi: dünaamiline, mis on staatiline tüüp, kuid selle tüübi objekti eksemplar suudab mööda minna staatilise tüübi kontrollimise protsessist. Enamasti töötab tüüp nagu objektklass. Kompileerimise ajal toetab dünaamilise klassi eksemplar mistahes operatsiooni, seega pole vaja muretseda, kas objekt pärineb COM API-st, dünaamilisest keelest nagu IronPython, HTML DOM-ist, peegeldusest või kuskilt mujalt programmis. Kui aga kood teeb midagi valesti, tabatakse viga käitusajal.
Näiteks näitemeetodil exampleMethod1 järgmises koodilõigus on ainult üks parameeter ning kompilaator suudab tuvastada, et see on kehtetu, kui kutsub ec.exampleMethod1(10,4) kompileerimise ajal; See on kompileerimisviga. Teist kutset dynamic_ec.exampleMethod1(10,4) ei kontrollita staatiliste tüüpide suhtes. Seetõttu ei teata kompilaator kompileerimisvigadest. Kuid putukas ei peitu igavesti; See tabatakse käivitusajal ja käivitab jooksuaegse erandi.
staatiline tühjus Main(string[] args){
    ExampleClass ec = uus ExampleClass();
    dünaamiline dynamic_ec = uus ExampleClass();
    dynamic_ec.exampleMethod1(10, 4);
    dynamic_ec.someMethod("mingi argument", 7, null);
    dynamic_ec.mitteeksistentMethod();
}
class ExampleClass {
    public ExampleClass() { }
    public ExampleClass(int v) { }
    public void näideMethod1(int i) { }
    public void exampleMethod2(string str) { }
}
Siin on näide dünaamika kasutamisest IronPythoni kutsumiseks:

kasutades IronPython.Hostingut;
kasutades Microsoft.scrip{filtering}ting. Saatejuhtimine;

Console.WriteLine("Laadimine random.py...");
scrip{filter}tRuntime py = Python.CreateRuntime();
dünaamiline juhuslik = py. UseFile("random.py");
Console.WriteLine("random.py laaditud!");
var items = loendatav.Range(1, 7). ToArray();

kui (int s = 0; s < 10000; s++) {
    random.shuffle(esemed);
    Console.Write("Järjestus {0}: ", s);
    foreach (int i esemetes) {
        Console.Write("{0} ", i);
    }
    Console.WriteLine();
}

Dünaamilise tüübi objektide või avaldiste puhul on kompilaatori roll kapseldada tegevused, mida iga avaldis peaks tegema, ning täitmise ajal kontrollida salvestatud infot ning kõik kehtetud laused käivitavad käitusaja erandi.
Enamiku dünaamiliste operatsioonide tulemus on samuti dünaamiline. Näiteks, kui viid hiirekursoriga testSumi kohal järgmises näites, kuvab nutikas käsk (lokaalmuutuja) dünaamilise testSumi.
dünaamiline d = 1;
var testSum = d + 3;
Hõlju hiireviisori allpool oleva testSumi kohale.
System.Console.WriteLine(testSum);

Tüübi ümberehitus
Dünaamilise tüübi ja teiste instantside vahel üleminek on lihtne ning arendajad saavad hõlpsasti vahetada dünmiliste ja mittedünaamiliste käitumiste vahel. Iga instantsi saab kaudselt teisendada dünaamilise tüübi instantsiks, vt järgmist näidet:
dünaamiline d1 = 7;
dünaamiline d2 = "string";
dünaamiline d3 = System.DateTime.Today;
dünaamiline d4 = System.Diagnostics.Process.GetProcesses();

Vastupidi, kaudset teisendust saab dünaamiliselt rakendada igale tüübidünaamilise avaldisele.
Ja vastupidi, iga dünaamilise tüübi avaldist saab kaudselt teisendada teisteks tüüpideks.
int i = d1;
string str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;

Ülekoormuse probleem dünaamiliste tüübiparameetritega meetodis
Kui meetod kutsutakse edasi dünaamilise tüübiga objekti või kutsutav objekt on dünaamilise tüübi dünaamiline, siis ülekoormuse hinnang toimub käitusajal, mitte kompileerimisel.

Dünaamilise keele käitusaegne DLR
Dünaamilise keele käitusaeg on . NET Framework 4 Beta 1 on uus API-de komplekt, mis toetab dünaamilisi tüüpe C#-s ning rakendab ka dünaamilisi programmeerimiskeeli nagu IronPython ja IronRuby.

COM ühilduvus
C# 4.0 sisaldab mitmeid funktsioone, mis parandavad ühilduvust traditsiooniliste COM API liidestega, nagu Office'i automatiseerimine. Dünaamilised tüübid, nimetatud parameetrid ja valikulised parameetrid on samuti osa täiustusest.
Paljud COM-meetodid lubavad oma parameetritel ja tagastatud väärtustel olla tüübiobjektid, seega tugevalt tüübistatud keelte, nagu C#, puhul on vaja palju sundtüüpi teisendamist. Kuid C# 4.0-s, kui lisada kompileerimise ajal /link valik, on dünaamilisel tüübil uus efekt: see muudab COM liidese meetodi signatuuri objektitüübi (parameetritüüp või tagastustüüp) dünaamiliseks, vältides seeläbi palju tüübi teisendamist. Näiteks järgmine väide kontrasteerib seda.
Seda ei kasutata dünaamiliselt.
((Excel.Range)excel. Rakud[1, 1]). Value2 = "Nimi";
Excel.Range = (Excel.Range)excel. Rakud[1, 1];

See oli dünaamiline.
Excel. Rakud[1, 1]. Value = "Nimi";
Excel. Vahemik = excel. Rakud[1, 1];




Eelmine:MVC AJAX. BeginForm() leht esitatakse asünkroonselt
Järgmine:Teine objekt sama identifikaatori väärtusega oli juba seotud...
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com