Funktion und Verwendung von dynamic (Teil 2)
Kommentare

var vs. dynamic
Ebenfalls neu in C# ist das Schlüsselwort var. Es wurde mit .NET 3.0 eingeführt und vereinfacht u. a. den Umgang mit LINQ-Abfragen. Wie auch bei object handelt es sich bei var um kein

var vs. dynamic

Ebenfalls neu in C# ist das Schlüsselwort var. Es wurde mit .NET 3.0 eingeführt und vereinfacht u. a. den Umgang mit LINQ-Abfragen. Wie auch bei object handelt es sich bei var um kein dynamisches Konstrukt. Durch die Verwendung von var ist der Entwickler zwar davon befreit, einen Datentyp explizit anzugeben, jedoch ist der Compiler in der Lage, den Typ anhand des Kontexts zu erkennen. Außerdem darf das Schlüsselwort var auch nur im lokalen Gültigkeitsbereich einer Variablen verwendet werden, es darf z. B. nicht als Typangabe für Methodenparameter benutzt werden.

Listing 3 verdeutlicht die Unterschiede zwischen var und dynamic. Der Variablen dynUtil vom Typ dynamic wird eine Instanz der Klasse Util zugewiesen. Da es sich um einen dynamischen Typ handelt, kann der Compiler nicht im Vorfeld den Typ erkennen. Das wird auch deutlich, wenn mittels IntelliSense versucht wird, die verfügbaren Mitglieder einzusehen. Abbildung 1 zeigt das Ergebnis des Versuchs.

Da es sich um einen dynamischen Typ handelt, sind die Eigenschaften und Methoden erst zur Laufzeit verfügbar. Daher wird auch die Zeile dynUtil.B() ohne Compilerfehler übersetzt. Bei der Ausführung kommt es allerdings zu einem Laufzeitfehler. Ganz anders hingegen verhält sich das var-Schlüsselwort. Wie Abbildung 2 zeigt, löst der Compiler den Typ bereits richtig auf und ermöglicht so IntelliSense. Da der Typ und damit die Mitglieder bekannt sind, meldet der Compiler bei dem Versuch, die Methode B() aufzurufen, auch eine entsprechende Fehlermeldung.

Listing 3

class Util {
  public void A() {
    Console.WriteLine("Hello World.");
  }
}
public static void Example2() {
  dynamic dynUtil = new Util();
  dynUtil.A();
  dynUtil.B();  // Laufzeitfehler
  var varUtil = new Util();
  varUtil.A();
  varUtil.B();  // Compiler-Fehler
}  

Abb. 1: IntelliSense-Verhalten bei einer als
Abb. 1: IntelliSense-Verhalten bei einer als „dynamic“ deklarierten Variablen

Abb. 2: IntelliSense-Verhalten bei einer als
Abb. 2: IntelliSense-Verhalten bei einer als „var“ deklarierten Variablen

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -