h1

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

Februar 11, 2008

Anonymous Types

Ich denke, dass es sich bei den Anonymous Types um ein recht einfach verständliches Feature handelt. Vielleicht wird es als Einzel-Feature nicht unbedingt häufig Anwendung finden, aber spätestens mit LINQ wird auch dieses Feature im Gesamtkonzept eine Daseinsberechtigung haben. Folgendes Codebeispiel würde ich auch zu diesem Context zählen:

class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }        
}

Auf den ersten Blick erscheint das wie eine abstrakte Klasse oder ein Interface, aber es handelt sich um ein .NET 3.5 Feature. Der Compiler generiert einfach die notwendigen privaten Variablen und macht aus diesen Zeilen Code jeweils einen Standard „getter“ und „setter“. Es spart dem faulen Programmierer einfach ein paar Zeilen Code. Auch folgende erweiterte Variante ist möglich:

class Customer
{
    public string Name { get; protected set; }
    public int Age { private get; set; }        
} 

Der Compiler ist auch hier Klever und generiert den entsprechenden Code, wobei in diesem Beispiel der „getter“ und „setter“ jeweils unterschiedliche Access-Modifier aufweisen.

Das folgende Beispiel zeigt wohl die in Zusammenhang mit LINQ häufigere Anwendung(Schreibweise) der anonymen Typen:

var p1 = new { Name = "Anonym", Price = 666.00 };
p1.Name = "Doch nicht Anonym";

Hier wird vom Compiler ein anonymer Typ mit zwei Properties generiert und auf die Variable p1 zugewiesen. Das schöne daran ist auch die vollständige Intellisense Unterstützung von Visual Studio 2008. Sogar folgende Zeilen werden vom Compiler ohne Fehler compiliert:

var p1 = new { Name = „Test1„, Price = 666.00 };
var p2 = new { Name = „Test2„, Price = 777.00 };
p1 = p2;

Hier wird vom Compiler ein und der selbe anonymer Typ für p1 und p2  generiert und somit ist auch die Zuweisung gültig. Das sind eigentlich die wichtigsten Fakten zu diesem Thema, was im nächsten Teil mit LINQ noch extensiver zum Einsatz kommt.

^ Teil 1: Übersicht aller Neuerungen (Einleitung)

< Teil 5: Object und Collection Initializer

> Teil 7: LINQ

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: