7.6 Implizit typisierte Variablen (Typinferenz) 

Anmerkung |
Gleich zu Anfang dieses Abschnitts sei eine Anmerkung gestattet. In den drei folgenden Abschnitten werden Sie »implizit typisierte Variablen«, »Lambda-Ausdrücke« und »anonyme Typisierung« kennenlernen. Natürlich können Sie diese Techniken in jeder Anwendung nach Belieben nutzen. Das Haupteinsatzgebiet ist aber eine Technologie, die mit dem .NET Framework 3.5 eingeführt worden ist: LINQ (Language Integrated Query). Mit LINQ werden wir uns im gleichnamigen Kapitel 10 beschäftigen, aber der Vollständigkeit halber werden diese C#-Sprachtechniken bereits in diesem Kapitel erklärt. |
Bei der Deklaration einer Variablen müssen Sie deren Datentyp angeben. So haben Sie es gelernt. Mit Einführung von C# 3.0 hat sich das geändert. Die Typinferenz gestattet es Ihnen, eine Variable mit dem neuen Schlüsselwort var zu deklarieren, ohne dabei den Datentyp angeben zu müssen:
var x = 5;
Das Schlüsselwort var bedeutet nicht, dass die Variable erst zur Laufzeit gebunden wird. Es bedeutet nur, dass der Compiler den am besten passenden Datentyp aus dem Ausdruck rechts vom Zuweisungsoperator ableitet. In unserem Beispiel wäre es ein Integer. Der Compiler behandelt die Variable dann so, als wäre sie von diesem Typ deklariert worden.
Bei dem abgeleiteten Typ kann es sich um einen integrierten Typ, einen anonymen Typ, einen benutzerdefinierten Typ, einen in der .NET Framework-Klassenbibliothek definierten Typ oder um einen Ausdruck handeln.
Hier folgen noch einige Beispiele, die den Einsatz implizit typisierter Variablen demonstrieren. Sie werden vermutlich die beiden letzten Beispiele noch nicht verstehen, weil ich Ihnen beispielsweise auch noch nicht erklärt habe, was unter einem anonymen Typ zu verstehen ist. Nur Geduld, ich werde das später noch nachholen.
// x wird als Integer kompiliert var x = 5; // s wird als String kompiliert var s = "Aachen"; // arr wird als int[]-Array kompiliert var arr = new[] { 0, 1, 2 }; // a wird als IEnumerable<Customer> kompiliert var a = from c in Products where c.CategoryID == 2 select c; // z wird als anonymer Typ kompiliert var z = new { Name = "Terry", Age = 34 }; // liste wird als List<int> kompiliert var liste = new List<int>();
Das Konzept implizit typisierter Variablen hat einige Einschränkungen:
- Die Variable muss eine lokale Variable sein.
- Die Initialisierung muss bei der Deklaration erfolgen.
- Einer implizit typisierten Variablen darf nicht null zugewiesen werden.
- Ein Methodenparameter darf nicht mit var deklariert werden.
- Der Rückgabetyp einer Methode darf ebenfalls nicht var sein.
Die Verwendung implizit typisierter Variablen ist nicht nur auf die Verwendung als lokale Variable beschränkt. Sie können sie auch in einer for- oder foreach-Schleife verwenden, wie in den beiden folgenden Codefragmenten gezeigt wird.
for (var x = 0; x < 100; x++)... foreach (var element in liste)...
Sie werden sich vermutlich nun fragen, wozu implizit typisierte Variablen dienen. Betrachten Sie sie einfach nur als syntaktisches Hilfsmittel, das Sie zwar einsetzen können, auf das Sie aber nach Möglichkeit verzichten sollten. Erforderlich werden solchermaßen deklarierte Variablen aber im Zusammenhang mit LINQ-Abfrageausdrücken (siehe auch Kapitel 10, »LINQ«).