Erweiterungsmethode
Als Erweiterungsmethode (engl. extension method) wird unter .Net-Framework eine Methode bezeichnet, die eine Klasse oder Schnittstelle[1] erweitert, ohne Teil der Implementierung der erweiterten Klasse zu sein. Es wirkt dabei nur auf den ersten Blick wie Mehrfachvererbung. Es handelt sich dabei allerdings um syntaktischen Zucker, also einen Compilertrick, der die Erweiterungsmethode der Klasse zuordnet.
Anwendung
[Bearbeiten | Quelltext bearbeiten]Erweiterungsmethoden werden in C# in einer statischen Klasse als statische Methode und in Visual Basic in einem Module definiert.
In C# definiert das Schlüsselwort this vor dem ersten Parameter den zu erweiternden Typen; in VB wird der erste Parameter übernommen, sofern die entsprechende Methode das Attribut ExtensionAttribute
hat.
Der Parameter, der erweitert wird, wird beim Aufruf nicht mit übergeben.
Beispiel (C#)
[Bearbeiten | Quelltext bearbeiten]Im C#-Beispiel soll die Klasse System.String
um eine weitere Substring-Anweisung ergänzt werden:
public static class MyStringExtensions
{
public static string MySubstring(this string me, int position, int length)
{
//beliebige Logik
return "My" + me.Substring(position, length);
}
}
// Die Schnittstelle IEnumerable<T> wird mit "IsNullOrEmpty()" erweitert.
public static class IEnumerableExtensions
{
public static bool IsNullOrEmpty<T>(this IEnumerable<T> x)
=> (x == null || x.Count() < 1);
}
Verwendung:
string teststring = "test";
teststring.MySubstring(1, 2);
IEnumerable<int> list = someObject.GetNumbers();
bool isNullOrEmpty = list.IsNullOrEmpty();
Vorteile
[Bearbeiten | Quelltext bearbeiten]- Erweiterung beliebiger Klassen, auch Klassen, die als
sealed
(C#) bzw.NotInheritable
(VB) definiert sind, wieSystem.String
- Hinzufügen einer konkret implementierten Methode an ein Interface und damit an alle darauf aufbauenden Klassen (z. B.
IList
) - Es ist nicht mehr nötig ganze Klassen abzuleiten um eigene Features hinzuzufügen
Nachteile
[Bearbeiten | Quelltext bearbeiten]- Extensions werden durch eine
using
- (C#) bzw.Imports
- (VB) Direktive verfügbar. Hier können Namespacekonflikte entstehen. - Durch intensive Verwendung von Extension Methods kann der Code unübersichtlich werden
Literatur
[Bearbeiten | Quelltext bearbeiten]- Erweiterungsmethoden im Buch Visual C# 2010 – Das umfassende Handbuch von Andreas Kühnel, Rheinwerk Verlag, Bonn 2010, ISBN 978-3-8362-1552-7
Weblinks
[Bearbeiten | Quelltext bearbeiten]Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Extension Methods - C# Programming Guide. Abgerufen am 21. März 2021 (amerikanisches Englisch).