C# 3.0 – Erweiterungsmethoden

Eine Neuerung von C# 3.0 sind Erweiterungsmethoden. Erweiterungsmethoden bieten die Möglichkeit bereits vorhandene Klassen mit weiterer Funktionalität auszustatten. Dabei können auch Klassen oder Strukturen erweitert werden, die als sealed gekennzeichnet sind oder Bestandteil des .NET Frameworks sind.

In folgendem Beispiel wird System.Int32 um eine Methode erweitert, die den aktuellen Wert mit einem Faktor multipliziert. Dazu wurde eine neue statische Klasse Extension hinzugefügt. Innerhalb dieser Klasse gibt es eine Methode mit dem Namen Multiplizieren. Diese Methode hat zwei Parameter, wobei eigentlich nur der erste interessant ist. Auffällig ist das Schlüsselwort this. Mit Hilfe dieses Schlüsselwortes erweitert der Compiler den Datentyp int um die angegebene Methode.

static class Extension
{
    public static int Multiplizieren(this int instance, int factor)
    {
        return instance * factor;
    }
}

Auch im Visual Studio IntelliSense ist diese Methode bereits vorhanden und wird dort mit einem speziellen Symbol und der Kennzeichnung (extension) angezeigt.

extension

Natürlich können Erweiterungsmethoden auch in Verbindung mit generischen Typen verwendet werden. In folgendem Beispiel wird die generische Liste um Methode HasElements erweitert. Diese Methode soll ausgeben, ob Elemente in der Liste enthalten sind.

static class Extension
{
    public static bool HasElements(this List list)
    {
        return list.Count > 0;
    }
}

Auch hier wird die neue Methode ebenfalls sofort im IntelliSense angezeigt.

GenericExtension

5. Ausgabe .NET BlogBook – Gewinne ein VSone-Ticket

cover_dotnet_blogbook

Bereits gestern wurde die eine neue Ausgabe des .NET BlogBook veröffentlicht. Ursprünglich war die neue Version erst für den 15. Januar geplant. Der Grund für die frühe Veröffentlichung ist das Gewinnspiel und der damit verbundene Gewinn: Ein Ticket für die VSone Konferenz, die bereits am 13. Februar startet. Das Gewinnspiel endet am 20. Januar. Somit hat der Gewinner noch genug Vorlauf um die Anreise und Unterkunft zu planen.

Auch diese Ausgabe des BlogBook beinhaltet wieder viel Neues – Insbesondere in den Bereichen Windows Presentation Foundation, C# 3.0 und Tools wurde zugelegt. Insgesamt ist das BlogBook nun 320 Seiten stark und hat somit 40 Seiten mehr als die letzte Ausgabe.

Mehr Informationen und den Download gibt es auf der Projektseite.

C# 3.0 – Anonyme Typen

Der geübte C# 2.0 Entwickler kennt bereits anonyme Methoden. Mit C# 3.0 werden die Methoden um anonyme Typen ergänzt. Hauptsächlich bei der Arbeit mit LINQ wird häufig Gebrauch von dieser neuen Entwicklung gemacht. In einem Satz werden anonyme Typen wie folgt definiert:

Anonyme Typen erlauben dem Entwickler Datentypen zu deklarieren, ohne dabei eine zugehörige formelle Definition dieser Typen zu erstellen.

Basis eines jeden anonymen Typs ist das Schlüsselwort var. Im Vorfeld muss zunächst ein Verständnis für dieses Schlüsselwort entwickelt werden. Daher ein kleiner Exkurs. Das Schlüsselwort var erlaubt dem Compiler die Bestimmung des zugrunde liegenden Datentyps – und zwar zurzeit des Kompilierens und nicht zur Laufzeit. Ein kleines Beispiel verdeutlicht dieses Vorgehen

var myInt = 10;
var myString = "Kai";
var myDouble = 100.5;

Mit Hilfe des .NET Reflector kann der Code, welcher durch den Compiler generiert wurde, analysiert werden.

anon

Die Analyse zeigt, dass tatsächlich die korrekten Datentypen deklariert wurden.

Das Verständnis und den verbundenen Nutzen von anonymen Typen, wird am besten anhand eines Beispiels deutlich. Innerhalb einer Logik wird ein Datentyp benötigt um mehrere Daten zu speichern und weiterverarbeiten zu können – Bsp. ein Kunde. Dieser Kunde soll jeweils durch einen Namen und eine Zahl definiert werden. Unter normalen Umständen würde nun eine Klasse mit dem Namen Customer erstellt werden. Mit Hilfe von anonymen Typen ist dies jedoch nicht nötig.

var customer = new { Name = "Kai", Zahl = 100 };

Das Ergebnis ist ähnlich der Klasse, die erstellt werden würde: Ein Typ mit den Eigenschaften Name und Zahl. Dies wird auch durch das Visual Studio IntelliSense deutlich

anon2

Auch wenn diese Erweiterung viele Dinge einfacher macht, so sollte sie dennoch mit Vorsicht genossen werden. Das Schlüsselwort var sollte grundsätzlich nur dann benutzt werden, wenn tatsächlich mit anonymen Typen gearbeitet wird. Alle anderen Definitionen von Datentypen sollten weiterhin auf die althergebrachte Weise durchgeführt werden.

Wann die Verwendung von anonymen Typen tatsächlich angebracht ist, muss jeder Entwickler für sich selbst entscheiden. Das angegebene Beispiel schildert doch recht deutlich, dass häufig Anwendungsfälle gefunden werden können.

C# 3.0 – Objekte initialisieren

Werden Objekte initialisiert müssen häufig verschiedene Eigenschaften mit Werten gefüllt werden. Stehen diese Eigenschaften nicht direkt im Konstruktor zur Verfügung, können sie über den Objektnamen angesprochen werden.

Customer customer = new Customer();
customer.Age = 33;
customer.Name = "Oliver";

Mit C# 3.0 ist es möglich auch Eigenschaften, die nicht über den Konstruktur verfügbar sind, direkt beim Initialisieren mit einem Wert zu füllen.

Customer customer = new Customer() { Age = 33, Name = "Oliver" };

Der Compiler wandelt diesen Code wieder in die ursprüngliche Variante um. Dies kann mit Hilfe des .NET Reflector überprüft werden.

initObjekte

Umfrage zum .NET BlogBook

Auf www.dotnetcasts.com wurde heute ein Umfrage mit dem Thema “Printversion des .NET BlogBook” gestartet. Um an der Umfrage teilzunehmen reicht ein kurzer Kommentar im Beitrag. Da Norbert und ich in letzter Zeit mehrere Anfragen zu dem Thema bekommen haben, freuen wir uns über jeden kurzen Beitrag.

http://www.dotnetcasts.com/2007/10/29/Umfrage+PrintVersion+NET+BlogBook.aspx

4. Ausgabe des .NET BlogBook veröffentlicht

cover_dotnet_blogbook

Heute wurde die 4. Ausgabe des .NET BlogBook veröffentlicht. Diese Ausgabe enthält überarbeitete und angepasste Artikel von Norbert und mir. Außerdem konnten wieder einige Verbesserungen durchgeführt werden. Vielen Dank an dieser Stelle für die Rückmeldungen.

In dieser Ausgabe findet sich zum ersten Mal ein Gewinnspiel. Zu gewinnen gibt esfünf Jahresabos der Zeitschrift ASP.NET Professional oder Visual Studio One. Mehr Informationen zum Gewinnspiel gibt es im BlogBook selbst.

http://www.dotnetcasts.com/Static.aspx?=dotnetblogbook

C# 3.0 – Automatische Eigenschaften

Ein häufiges Konstrukt um unter C# 2.0 Eigenschaften zu erstellen, ist dieses hier:

private string myProperty;

public string MyProperty
{
    get { return myProperty; }
    set { myProperty = value; }
}

In C# 3.0 kann eine solche Eigenschaft mit viel weniger geschriebenem Code erzeugt werden, genauer gesagt mit einer einzigen Zeile Code.

public string MyProperty { get; set; }

Das zugehörige Feld und der Getter bzw. Setter werden automatisch durch den Compiler erzeugt.

Dass dies tatsächlich so ist kann mit Hilfe des .NET Refletor überprüft werden. Der generierte Code ist jeweils mit dem Attribut [CompilerGenerated] gekennzeichnet.

AutomaticProperties

Natürlich können automatische Eigenschaften immer nur mit Getter und Setter erzeugt werden. Damit der Setter nur innerhalb der Klasse benutzt werden kann, muss dieser einfach als private deklariert werden.

public string MyProperty { get; private set; }

Der generierte Code zeigt nun jeweils einen privaten Setter und öffentlichen Getter.

AutomaticProperties2

Viele neue Podcasts auf .NET Casts

dotnetcasts_button_300x74

Auf www.dotnetcasts.com wurden in den letzten Woche einige neue Podcasts veröffentlicht:

Windows Live
Norbert Eder
Download: .NET Casts Podcast

Windows Live ID Development
Norbert Eder
Download: .NET Casts Podcast

ASP.NET Teil 1: Basiswissen
Kai Gloth
Download: .NET Casts Podcast

ASP.NET Teil 2: Benutzerdefinierte Erweiterungen
Kai Gloth
Download: .NET Casts Podcast

Eine komplette Übersicht alle bisher veröffentlichten Podcasts gibt es hier. Zukünftig sind weitere spannende und interessante Themen geplant. Ein kurzer Blick lohnt sich also immer.

LINQPad – LINQ Ausdrücke testen

Joseph Albahari hat ein Tool geschrieben mit dem es auf einfache und schnelle Weise möglich ist LINQ Ausdrücke zu testen – ähnlich dem SQL Query Analyzer. Das Tool unterstützt sowohl LINQ to Objects, als auch LINQ to SQL und LINQ to XML. Nach dem Download kann das Tool direkt ohne Installation gestartet werden, vorausgesetzt das .NET Framework 3.5 Beta 2 ist installiert.

linqpad

Mehr Infos, sowie den Download gibt es hier.

Jobs bei DeDeNet

Die Firma DeDeNet, bei der ich arbeite, hat momentan zwei vakante Stellen am Standort 37589 Echte / 37154 Northeim in der Softwareentwicklung. DeDeNet wurde 1996 gegründet und zeichnet sich durch mehr als 400 realisierte Projekte im Business-, Mobile- und Web-Bereich aus.

Technologischer Schwerpunkt in der Entwicklung liegt auf dem .NET Framework. Gefordert sind Kenntnisse in den Bereichen Html, CSS, JavaScript, sowie classic ASP, PHP, oder ASP.NET in Verbindung mit C#.

Geboten wird ein junges und dynamisches Team, das Spaß an der Entwicklung und dem Einsatz neuer Technologien hat, sowie ein moderner Arbeitsplatz und eine leistungsgerechte Bezahlung.

Bewerbungen bitte an jobs@dedenet.de