Typinferenz und das Schlüsselwort var
Sehen Sie sich den folgenden Code an. Der Typ am Anfang jeder Variablendeklaration kann vom Compiler automatisch aus dem Initialisierungswert rechts vom Gleichheitszeichen abgeleitet werden. Lässt sich zum Beispiel aus der Zahl 18 der Ganzzahltyp int ableiten und aus Phone() ein Objekt vom Typ Phone?
static void Main( )
{
int age = 18; // Der Wert 18 rechts wird direkt als int erkannt
Phone p = new Phone(); // Der Konstruktor rechts gibt eine Phone-Instanz zurück
}
Code-Sprache: C# (cs)
Lässt sich der obige Code also vereinfachen?
C# stellt das Schlüsselwort var zur Verfügung, um explizite Typangaben einzusparen und die Schreibweise zu verkürzen.
static void Main( )
{
var age = 18;
var p = new Phone();
}
Code-Sprache: JavaScript (javascript)
Bei diesem Code steht auf der linken Seite für alle Variablen var. Der Compiler ermittelt den passenden Typ aus dem rechten Ausdruck. Nach der Kompilierung sind beide Codebeispiele identisch.

Hinweise
varist kein dynamischer Typ, sondern nur syntaktische Abkürzung. Der Compiler legt den abgeleiteten Typ zur Kompilierzeit fest, er lässt sich danach nicht mehr ändern; beide Codeabschnitte verhalten sich exakt gleich.- Verbindliche Regeln bei der Nutzung von
var:- Nur für lokale Variablen nutzbar, nicht für Klassenfelder
- Bei der Deklaration muss ein Initialwert zugewiesen werden,
var x;allein ist ungültig - Der abgeleitete Typ bleibt fest, der Variable können später keine Werte eines anderen Typs zugewiesen werden
- Wichtiger Unterschied:
varin C# ≠varin JavaScript. Das var in JavaScript arbeitet mit dynamischer schwacher Typisierung und erlaubt beliebige Typwechsel bei Variablen. Das var in C# ist lediglich eine Abkürzung innerhalb einer statisch stark typisierten Sprache und ändert nicht die Eigenschaften von C# als stark typisierte Sprache.
Das bedeutet: Zur Kompilierzeit wertet der Compiler den rechten Ausdruck aus, legt für age den Typ int und für p den Typ Phone fest. Das Ergebnis entspricht genau dem ersten Codebeispiel.
Die Typen lassen sich danach nicht mehr verändern. Hier ein Beispiel:

class Program
{
static void Main()
{
var age = 18;
age = 3.14;
var p = new Phone();
}
}
class Phone
{
public string Name { get; set; }
}Code-Sprache: C# (cs)
Diese Schreibweise führt in C# zu einem Fehler. In anderen Sprachen wie JavaScript oder PHP ist sie dagegen zulässig, dort können Variablen beliebig den Typ wechseln.
JavaScript und PHP zählen zu den Sprachen mit schwacher, dynamischer Typisierung; Variablen unterliegen keiner festen Typbindung.

Ungültiges Beispiel
class Program
{
static void Main()
{
var age = 18;
age = 3.14;
var p = new Phone();
var isBuy;
}
}
class Phone
{
var price = 1000;
var model = "iPhone";
int count = 12;
}Code-Sprache: C# (cs)
Typinferenz