Neues .NET 3.5 Feature: Extension Methods
Die erste interessante Spracherweiterung in .NET 3.5 die ich hier beschreiben möchte, ist die Extension Method (Erweiterungs-Methode).
Mit den Extension Methods lassen sich vorhandene Typen um bestimmte Features erweitern.
Eine Extension Method könnte zum Beispiel so aussehen:
public static class StringExtension
{
public static bool IsNumeric(this string s)
{
int i = 0;
return int.TryParse(s, out i);
}
}
Die Methode muss in einer öffentlichen statischen Klasse definiert dein und selber öffentlich und statisch sein. Das besondere an dieser Methode ist der erste Parameter, der zusätzlich mit dem Schlüsselwort „this“ definiert wird. Das Schlüsselwort gibt dem Compiler an, dass die Methode dem angegebenen Typ (hier „string“) hinzugefügt werden soll.
Üblicherweise würde man eine statische Methode auf folgende Weise benutzen (was mit Extension Methods auch weiterhin funktioniert):
if (StringExtension.IsNumeric(this.txtInput.Text))
{
this.lblAlert.Text = "Bitte geben Sie einen numerischen Wert ein.";
}
Aber die Extension Methode würde nicht so genannt werden, wenn sie nicht etwas erweitern würde. In unserem Fall wird er Typ „string“ um die Methode „IsNumeric()“ erweitert:
if (!this.txtInput.Text.IsNumeric())
{
this.lblAlert.Text = "Bitte geben Sie einen numerischen Wert ein.";
}
Im IntelliSense ist eine Extension Methode mit dem Methoden Symbol und einem nach unten zeigenden blauen Pfeil gekennzeichnet. Und im Tooltip mit dem in Klammern stehenden Wort „extension“.
Alle weiteren Parameter die zusätzlich definiert werden, werden dann wie normale Parameter behandelt:
public static bool IsInArray(this string s, string[] array)
{
foreach (string item in array)
if (s == item)
return true;
return false;
}
string[] myarray = { "item1", "item2", "item3", "item4" };
string mystring = "item3";
if (mystring.IsInArray(myarray))
{
// do anything here
}

Weitere Resourcen zu Extension Methods:
http://msdn.microsoft.com/msdnmag/issues/07/11/basicinstincts/default.aspx?loc=de
http://msdn2.microsoft.com/de-de/library/ms364047(vs.80).aspx#cs3spec_topic3
http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
http://en.wikipedia.org/wiki/Extension_method