Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 18548|Odpowiedź: 0

[Źródło] Zastosowanie dynamicznego w C# 4.0

[Skopiuj link]
Opublikowano 07.07.2016 10:23:00 | | |
C# 4.0 wprowadza nowy typ: dynamiczny, który jest typem statycznym, ale instancja obiektu tego typu jest w stanie ominąć proces statycznego sprawdzania typów. W większości przypadków typ działa jak klasa obiektu. W czasie kompilacji instancja klasy dynamicznej obsługuje dowolną operację, więc nie trzeba się martwić, czy obiekt pochodzi z API COM, języka dynamicznego takiego jak IronPython, z HTML DOM, z reflection lub innego miejsca w programie. Jednak jeśli kod robi coś nieprawidłowego, błąd jest wykrywany w czasie działania.
Na przykład przykładowa metoda exampleMethod1 w następującym fragmencie kodu ma tylko jeden parametr, a kompilator może zidentyfikować jego nieprawidłowość podczas wywoływania ec.exampleMethod1(10,4) podczas kompilacji; To jest błąd kompilacji. Drugie wywołanie dynamic_ec.exampleMethod1(10,4) nie jest sprawdzane pod kątem typów statycznych. Dlatego kompilator nie zgłasza błędów kompilacji. Jednak robak nie ukrywa się wiecznie; Zostanie wychwycony w czasie działania i wywoła wyjątek w czasie wykonywania.
static void Main(string[] args){
    ExampleClass ec = new ExampleClass();
    dynamic dynamic_ec = nowa ExampleClass();
    dynamic_ec.exampleMethod1(10, 4);
    dynamic_ec.someMethod ("some argument", 7, null);
    dynamic_ec.nonexistentMethod();
}
class ExampleClass {
    public ExampleClass() { }
    public ExampleClass(int v) { }
    public void exampleMethod1(int i) { }
    public void exampleMethod2(string str) { }
}
Oto przykład użycia dynamic do wywołania IronPythona:

używając IronPython.Hosting;
using Microsoft.scrip{filtering}ting. Prowadzenie;

Console.WriteLine("Ładowanie random.py...");
scrip{filter}tRuntime py = Python.CreateRuntime();
Losowość dynamiczna = py. UseFile("random.py");
Console.WriteLine("random.py załadowana!");
var items = Enumerable.Range(1, 7). ToArray();

dla (int s = 0; s < 10000; s++) {
    random.shuffle(items);
    Console.write("Sequence {0}: ", s);
    foreach (int i w przedmiotach) {
        Console.Write("{0} ", i);
    }
    Console.WriteLine();
}

Dla obiektów lub wyrażeń o dynamice typów rolą kompilatora jest enkapsulowanie działań, które każde wyrażenie ma wykonać, a w momencie wykonania sprawdzenie przechowywanych informacji, a wszelkie nieprawidłowe instrukcje wywołają wyjątek w czasie wykonywania.
Typ wyniku większości operacji dynamicznych jest również dynamiczny. Na przykład, jeśli najedziesz kursorem myszy na testSum w poniższym przykładzie, inteligentny komunikat wyświetli (zmienną lokalną) testSum dynamiczną.
dynamiczny d = 1;
var testSum = d + 3;
Najedź kursorem myszy nad testSum poniżej.
System.Console.WriteLine(testSum);

Konwersja typu
Przejście między instancjami typu dynamicznego a innymi typami jest proste, a deweloperzy mogą łatwo przełączać się między zachowaniami dynamicznymi a niedynamicznymi. Każdą instancję można domyślnie przekształcić w instancję typu dynamicznego, zobacz następujący przykład:
dynamiczne d1 = 7;
dynamiczny d2 = "struna";
dynamiczne d3 = System.DateTime.Today;
dynamic d4 = System.Diagnostics.Process.GetProcesses();

Natomiast konwersja niejawna może być dynamicznie stosowana do dowolnego wyrażenia dynamicznego typu.
I odwrotnie, każde wyrażenie dynamicznego typu może być również niejawnie przekształcone w inne typy.
int i = d1;
strumień str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;

Problem przeciążenia z parametrami typu dynamicznego w metodzie
Jeśli metoda jest wywoływana jako obiekt o dynamicznym typie lub obiekt wywoływany jest dynamiczny typu dynamic, to ocena przeciążenia następuje w czasie działania, a nie w czasie kompilacji.

Dynamiczny język DLR w czasie rzeczywistym
Dynamiczne środowisko wykonawcze języka to . NET Framework 4 Beta 1 to nowy zestaw API wspierających typy dynamiczne w C# oraz implementujących języki programowania dynamicznego, takich jak IronPython i IronRuby.

Interoperacyjność COM
C# 4.0 zawiera kilka funkcji poprawiających interoperacyjność z tradycyjnymi interfejsami COM API, takimi jak automatyzacja Office. Elementy ulepszenia są także typy dynamiczne, parametry nazwane oraz parametry opcjonalne.
Wiele metod COM pozwala, aby ich parametry i wartości zwrotne były obiektem typu, więc w językach silnie typowanych, takich jak C#, wymagana jest duża konwersja typów. Jednak w C# 4.0, jeśli dodasz opcję /link podczas kompilacji, typ dynamiczny ma nowy efekt: sprawia, że typ obiektu (typ parametru lub typ return) w sygnaturze metody interfejsu COM jest traktowany jako dynamiczny, co pozwala uniknąć wielu konwersji typów. Na przykład następujące stwierdzenie to kontrastuje.
Nie jest używany dynamicznie.
((Excel.Range)excel. Komórki[1, 1]). Value2 = "Imię";
Excel.Zakres = (Excel.Zakres)excel. Komórki[1, 1];

To była dynamiczna relacja.
Excel. Komórki[1, 1]. Wartość = "Imię";
Excel. Zakres = excel. Komórki[1, 1];




Poprzedni:MVC AJAX. Strona BeginForm() jest wysyłana asynchronicznie
Następny:inny obiekt o tej samej wartości identyfikatora był już powiązany z...
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com