Hat das neue ‚dynamische‘ C # 4.0 Schlüsselwort das ‚var‘ Schlüsselwort deprecate?

StackOverflow https://stackoverflow.com/questions/298277

  •  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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top