Warum dynamische Eingabe in c # verwenden?

8

Zuerst dachte ich etwas wie:

%Vor%

Ist sehr unlesbar und daher verwende ich dynamisches Tippen nur, wenn kein Platz für Verwirrung ist, zB:

%Vor%

Hier,

%Vor%

scheint lesbar zu sein. Aber als ich gelesen habe ( hier Ich habe versucht, alle anderen Beiträge in diesem Link zu lesen, um zu verstehen, wo ich dynamische Typisierung verwenden sollte, aber ich konnte nicht einmal einen guten Grund finden. Soll ich nur darauf warten, wenn ich mir selbst sage - "Das kann nur mit dynamischem Tippen gelöst werden"? Oder gibt es bessere (praktische) Gründe für die Verwendung? Danke.

Bearbeiten: Mein Fehler (-: schließt diese Frage so schnell wie möglich.

    
Oren A 05.09.2010, 21:13
quelle

6 Antworten

26

var ist keine dynamische Typisierung. Es ist nur, dass der Typ von aName vom Compiler abgeleitet wird.

Ihr Beispiel ist immer noch vollständig statisch getippt und hat keine Leistungseinbußen. Ihr Code wird in genau die gleiche IL kompiliert wie bei einem expliziten Typnamen.

In C # 4 gibt es jetzt dynamisches Schreiben , aber es würde folgendermaßen geschrieben:

%Vor%

Meine persönliche Überzeugung ist, dass dynamisches Tippen relativ nur selten in C # 4 nützlich ist - grundsätzlich, wenn Sie mit Daten arbeiten, die bereits nur dynamisch bekannt sind, z. Reflexion oder Navigation durch XML.

    
Jon Skeet 05.09.2010, 21:14
quelle
6

Dies ist keine dynamische Eingabe. Die var deklariert einen statischen Typ, der zur Kompilierzeit bekannt ist, und er ist absolut gleichbedeutend mit der Deklaration des Typs Name. Der Compiler wird den Typ ableiten und in der resultierenden Assembly ersetzen.

    
Darin Dimitrov 05.09.2010 21:15
quelle
5

Die Verwendung des Schlüsselworts var ist keine dynamische Typisierung. Das Schlüsselwort var wird vom Compiler behandelt. Die Variable wird basierend auf der ersten Zuweisung an die Variable statisch typisiert.

Der Typ von:

%Vor%

Ist StringBuilder. Es gibt keine Möglichkeit, diesen Typ zu ändern (was dynamische Typisierung zulässt).

Was Jon Skeet in seinem Blog erwähnt, ist das dynamic -Schlüsselwort. Das ist ein ganz anderes Tier.

    
Justin Niessner 05.09.2010 21:15
quelle
2

Das ist keine dynamische Eingabe. Dynamische Typisierung erfolgt durch den Typ "dynamisch" (seltsamerweise). Da var überhaupt keinen Overhead hat, ist es eine Kurzschrift, die immer noch stark typisierte Variablen erzeugt.

    
Robaticus 05.09.2010 21:15
quelle
2

Sie sind misunderaninf, warum dynamische Typisierung ist.

"var" verwendet Type Inference, um zum Zeitpunkt der Kompilierung den Typ der Variablen abzuleiten. Der Mechanismus ist ziemlich geradlinig und hat keinerlei Auswirkungen auf die Leistung. Eine Variable, die mit "var" deklariert wird, kann immer nur ein genauer Typ sein (oder Ableitungen dieses Typs).

Dynamische Variablen ermöglichen einer Variablen, den beliebigen -Typ zur Laufzeit beizubehalten und dennoch Operationen für dieses Objekt auszuführen, als wüssten wir, was unterstützt wird. Mit jedem dieser Aufrufe überprüft die Laufzeitumgebung, ob der Methodenaufruf tatsächlich unterstützt wird. Das ist einer der Gründe dafür, dass dynamische Typisierung einen Laufzeit-Overhead hat.

    
Chris Pitman 05.09.2010 21:18
quelle
2

Wie alle anderen bereits erwähnt haben, gibt uns das Schlüsselwort "var" keine dynamische Typisierung. Der Typ wird zur Kompilierzeit abgeleitet.

Ich benutze var, wenn ich denke, dass es Sinn macht; wenn nämlich der Typ offensichtlich ist und die Ausführlichkeit einer Deklaration einschränkt:

%Vor%

Anstelle von ...

%Vor%

Aber in Ihrem Beispiel hier:

%Vor%

Ich würde nicht 'var' verwenden, weil Sie, wie Sie bereits bemerkt haben, den Rückgabetyp von 'getAllSomethings ()' (falscher Benennungsstil für C # BTW) überprüfen müssen, um zu wissen, was 'aName' ist , wodurch der Code weniger lesbar wird.

    
Ed S. 05.09.2010 21:20
quelle

Tags und Links