h1

.NET 3.5 – Neuerungen bei C#3.0 – Teil 2 von 9

August 13, 2007

Implizit typisierte Variablen und implizit typisiserte Arrays Der Teil 2 ließ lange auf sich warten, aber nun versuche ich die 9 Teile zügig weiter fortzuführen. Heute gleich mit einem recht einfach verständlichem Thema. Wofür das gut ist und wozu das bei .NET 3.5 eingebaut wurde wird euch sicher bei den nächsten Teilen deutlich bzw. ich werde sicher darauf nocheinmal hinweisen. Variablen und Arrays können implizit mit dem Schlüsselwort var deklariert werden. Dieses kann nur bei Lokalen Variablen, for-Initializern, Resource-Aquisition und bei foreach-Statements verwendet werden. Z. Bsp:

var a = 4711;
var b = "Hallo Welt";
var c = 1.0;
var nums = new int[] {0, 1, 2, 3, 4};
var products = new Dictionary<int,Product>();

Dies entspricht:

int a = 4711;
string b = "Hallo Welt";
double c = 1.0;
int[] nums = new int[] {0, 1, 2, 3, 4};
Dictionary<int,Product> products = new Dictionary<int,Product>();

Implizit typisierte Variablen und Arrays können nur unter folgenden Rahmenbedingungen verwendet werden:

  • Die Variable muss initialisiert werden
  • Der Initializer muss ein Ausdruck (expression) sein.
  • Der Initializer Ausdruck muss zur Compile-Zeit einen Typ besitzen der kein null Typ ist.
  • Die Deklaration der lokalen Variable darf keine mehrfachen Deklaratoren besitzen.
  • Der Initializer darf keine deklarierte Variable referenzieren

Folgende Beispiele zeigen fehlerhafte Verwendung die zu einem Compiler-Error führen:

var a; // Error, kann kein Typ zur Compilezeit ermittelt werden. 
var b = {0, 1, 2, 3}; // Error, collection initializer nicht mgl. 
var c = null; // Error, null ist nicht erlaubt 
var a = b => c + 1; // Error, lambda expr. haben keinen Typ
var i = i++; // Error, Initializer darf nicht sich selbst ref.

Beispiel für foreach:

int[] nums = { 0, 1, 2, 3, 4 };
foreach (var n in numbers) Console.WriteLine(n);

Beipiele für implizit typisierte Arrays:

var a = new[] { 1, 10, 1000 };    // int[]
var b = new[] { 1, 1.5, 2, 2.5 }; // double[]
var c = new[] { "hello", null, "world” }; // string[]
var d = new[] { 1, "one", 2, "two" };     // Error

Verschachtelte Varianten sind auch möglich. Hier wird eine anonyme Datenstruktur innerhalb eines Arrays aufgebaut, die wiederum ein implizit typisiertes Array verwendet:

var c = new []{
    new {Name = “Microsoft“,
        PhoneNumbers = new []{ “206-555-0101“, “425-882-8080” }},
    new {Name = “Basta“,
        PhoneNumbers = new []{ “206-666-0101“, “425-888-8080” }}
};

^ zum Teil 1: Einleitung

> zum Teil 3: Extension Methods

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: