var
ist nur eine Abkürzung für "Lassen Sie den Compiler den richtigen Variablentyp für mich auswählen" (Kompilierzeit Typ-Inferenz ist der genauere Begriff).
object
andererseits ist ein spezifischer Typ; Alle anderen Referenztypen stammen von object
, sodass Sie einer Variablen vom Typ object
alles zuweisen können.
var
ist die Antwort, wenn Sie sich fragen, muss ich wirklich diesen langen Typnamen zweimal eingeben, zum Beispiel:
Warum kein Freund, Sie nicht. Verwenden Sie stattdessen var
:
Jetzt ist myDict
wirklich ein Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>
, also kannst du Dinge hinzufügen, aufzählen, usw.
Wenn Sie es als object
deklariert haben, konnten Sie keine Operationen ausführen, die von Dictionary
bereitgestellt werden, nur die für alle Objekte gültigen.
Im ersten Beispiel weiß der Compiler, dass foo
eine Zeichenkette ist, und so können wir String-Methoden für foo
aufrufen.
Im zweiten Beispiel "upcast" wir die Zeichenkette foo
auf ein Objekt. Nun weiß der Compiler nicht (weil er es nicht wissen sollte!), Dass bar
tatsächlich eine Zeichenkette ist, und wir können String-Methoden nicht auf bar
aufrufen. Der Compiler erlaubt kein implizites Downcasting von einem Objekt (oder einem Basistyp) auf einen abgeleiteten Typ (wie System.String
). Teil der Kompilierzeit Typ Sicherheitsregeln.
Tags und Links c#