Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 18548|Odpoveď: 0

[Zdroj] Použitie dynamiky v C# 4.0

[Kopírovať odkaz]
Zverejnené 7. 7. 2016 10:23:00 | | |
C# 4.0 zavádza nový typ: dynamický, čo je statický typ, ale inštancia objektu tohto typu dokáže obísť proces kontroly statického typu. Vo väčšine prípadov typ funguje ako objektová trieda. Pri kompilácii inštancia dynamickej triedy podporuje akúkoľvek operáciu, takže nie je potrebné sa obávať, či je objekt prevzatý z COM API, alebo z dynamického jazyka ako IronPython, z HTML DOM, z reflectionu alebo odniekiaľ inde v programe. Ak však kód urobí niečo neplatné, chyba sa zachytí počas behu.
Napríklad príklad metódy exampleMethod1 v nasledujúcom kódovom úryvku má len jeden parameter a kompilátor dokáže identifikovať, že je neplatný pri volaní ec.exampleMethod1(10,4) pri kompilácii; Ide o chybu pri kompilácii. Druhé volanie dynamic_ec.exampleMethod1(10,4) nie je kontrolované pre statické typy. Preto kompilátor nehlási chyby pri kompilácii. Avšak chrobák sa neskrýva navždy; Bude zachytený počas behu a spustí výnimku za behu.
static void Main(string[] args){
    ExampleClass ec = new ExampleClass();
    dynamic dynamic_ec = nový ExampleClass();
    dynamic_ec.exampleMethod1(10, 4);
    dynamic_ec.someMethod("nejaký argument", 7, null);
    dynamic_ec.nonexistentMethod();
}
class ExampleClass {
    public ExampleClass() { }
    public ExampleClass(int v) { }
    public void exampleMethod1(int i) { }
    public void exampleMethod2(string str) { }
}
Tu je príklad použitia dynamic na volanie IronPythonu:

pomocou IronPython.Hosting;
using Microsoft.scrip{filtering}ting. Moderovanie;

Console.WriteLine("Loading random.py...");
scrip{filter}tRuntime py = Python.CreateRuntime();
dynamická náhodnosť = py. UseFile("random.py");
Console.WriteLine("random.py načítaný!");
var položky = Enumerable.Range(1, 7). ToArray();

pre (int s = 0; s < 10000; s++) {
    random.shuffle(items);
    Console.Write("Sequence {0}: ", s);
    foreach (int i v položkách) {
        Console.Write("{0} ", i);
    }
    Console.WriteLine();
}

Pre objekty alebo výrazy typu dynamic je úlohou kompilátora zapuzdriť akcie, ktoré sa očakávajú, že každý výraz vykoná, a pri ich vykonaní skontrolovať uložené informácie, pričom akékoľvek neplatné príkazy spustia výnimku za behu.
Typ výsledku väčšiny dynamických operácií je tiež dynamický. Napríklad, ak prejdete kurzorom myši nad testSum v nasledujúcom príklade, smart prompt zobrazí (lokálnu premennú) dynamický testSum.
dynamický d = 1;
var testSum = d + 3;
Podržte kurzor myši nad testSum nižšie.
System.Console.WriteLine(testSum);

Typová konverzia
Prechod medzi inštanciami dynamických typov a inými typmi inštancií je jednoduchý a vývojári môžu jednoducho prepínať medzi dynamickým a nedynamickým správaním. Každú inštanciu možno implicitne previesť na inštanciu dynamického typu, pozri nasledujúci príklad:
dynamický d1 = 7;
dynamický d2 = "reťazec";
dynamický d3 = System.DateTime.Today;
dynamic d4 = System.Diagnostics.Process.GetProcesses();

Naopak, implicitná konverzia môže byť dynamicky aplikovaná na akýkoľvek výraz typovej dynamiky.
A naopak, akýkoľvek výraz typu dynamický môže byť implicitne prevedený na iné typy.
int i = d1;
reťazec str = d2;
DátumČas dt = d3;
System.Diagnostics.Process[] procs = d4;

Problém preťaženia s dynamickými typovými parametrami v metóde
Ak je metóda volaná ako objekt typu dynamic alebo objekt, ktorý je volaný, je typu dynamic, potom sa hodnotenie preťaženia vykonáva počas behu, nie pri kompilácii.

Dynamický jazykový runtime DLR
Dynamický jazykový runtime je . NET Framework 4 Beta 1 je nová sada API, ktoré poskytujú podporu dynamických typov v C# a zároveň implementujú dynamické programovacie jazyky ako IronPython a IronRuby.

Interoperabilita COM
C# 4.0 obsahuje niekoľko funkcií, ktoré zlepšujú interoperabilitu s tradičnými rozhraniami COM API, ako je kancelárska automatizácia. Dynamické typy, pomenované parametre a voliteľné parametre sú tiež súčasťou zlepšenia.
Mnohé metódy COM umožňujú svoje parametre a návratové hodnoty byť typovým objektom, takže pre silne typované jazyky ako C# je potrebná veľká nútená konverzia typov. Avšak v C# 4.0, ak pridáte možnosť /link pri kompilácii, dynamický typ má nový efekt: robí objektový typ (parameter type alebo return type) v podpise COM rozhrania považovaný za dynamický, čím sa vyhýba veľkej konverzii typu. Napríklad nasledujúce tvrdenie to kontrastuje.
Nepoužíva sa dynamicky.
((Excel.Range)excel. Bunky[1, 1]). Value2 = "Meno";
Excel.Range range = (Excel.Range)excel. Bunky[1, 1];

Bol dynamický.
Excel. Bunky[1, 1]. Hodnota = "Meno";
Excel.Range range = excel. Bunky[1, 1];




Predchádzajúci:MVC AJAX. Stránka BeginForm() sa odosiela asynchrónne
Budúci:iný objekt s rovnakou hodnotou identifikátora už bol priradený s...
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com