Hat das neue ‚dynamische‘ C # 4.0 Schlüsselwort das ‚var‘ Schlüsselwort deprecate?
-
08-07-2019 - |
Frage
Wenn C # 4.0 kommt heraus und wir haben das Schlüsselwort dynamic wie in diesem hervorragende Präsentation von Anders Hejlsberg , (C # entwickelt sich schneller, als ich halten kann .. ich nicht viel Zeit, um mich mit dem Schlüsselwort var bekannt zu machen hatte)
Würde ich muss noch das Schlüsselwort var? Gibt es irgendetwas, das var tun kann .. das dynamische nicht?
var x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x
dynamic x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x
Lösung
Nein, sie sind sehr unterschiedlich.
var
bedeutet „den Typen der Variablen zur Compile-Zeit schließen“ - aber es ist immer noch völlig statisch gebunden
dynamic
bedeutet „nehme ich alles tun, kann ich mit dieser Variablen wollen“ - dh der Compiler nicht weiß, was Operationen zur Verfügung stehen, und das DLR wird herausfinden, was die Anrufe wirklich bei der Ausführung bedeuten Zeit.
Ich erwarte, dass dynamic
zu verwenden, sehr selten - nur wenn ich wirklich dynamisches Verhalten will:
-
var
können Sie Tippfehler etc zur Compile-Zeit fangen
- statisch gebundener Code wird immer schneller als dynamisch gebundenen Code auszuführen (auch wenn der Unterschied wird relativ klein)
- statisch gebundenen Code gibt mehr Compiler-Unterstützung mehr als nur Fehler: Sie Anruf Hierarchien finden können, Refactoring besser funktionieren wird, Intellisense ist verfügbar usw.
Andere Tipps
Dynamische und var repräsentieren zwei völlig unterschiedliche Vorstellungen.
var
Var geht im wesentlichen der Compiler den Typen der Variablen, um herauszufinden, basierend auf dem Ausdruck auf der rechten Seite der Zuordnungsanweisung. Die Variable wird dann genauso behandelt, als ob sie explizit als Typ des Ausdrucks deklariert wurden. Zum Beispiel sind die beiden folgenden Aussagen äquivalent
var a = "foo";
string a = "foo";
Der Schlüssel weg hier zu nehmen ist, dass „var“ 100% Typ ist sicher und ist eine Kompilierung Betrieb
dynamische
Dynamic ist in vielerlei Hinsicht das genaue Gegenteil von var. dynamische Verwendung von im Wesentlichen alle Arten Sicherheit für thet bestimmte Variable zu eliminieren. Es vielerlei Hinsicht hat es keinen Typ. Wenn Sie eine Methode oder ein Feld auf der Variablen aufrufen, auf die Bestimmung, wie das Feld zur Laufzeit auftritt aufzurufen. Zum Beispiel
dynamic d = SomeOperation();
d.Foo(); // Will this fail or not? Won't know until you run the program
Der Schlüssel weg hier zu nehmen ist, dass „dynamische“ Typ ist nicht sicher und ist eine Laufzeitbetrieb
Ja, Sie werden immer noch var müssen:
Var ist eine Variable , dessen Typ vom Compiler abgeleitet wird.
dynamische wird seine Art zur Laufzeit zugewiesen
So:
Var i = "Hello World"
wird seine Art als String-Typ abgeleitet, so Intellisence dabei geben Ihnen alle Methoden, die Zeichenfolge wie verwenden können,
i.Split("/")
Wo, wie:
dynamic i = "Hello World"
nicht seine Art inferred, bis der Laufzeit haben, weil die complier dosn't wissen, welche Art es noch ist, aber immer noch können Sie tun:
i.Split("/")
aber wenn es ruft die Methode, die Sie es brauchen kann fehlschlagen, weil der Typ falsch ist und das Verfahren ist nicht da.