Erweiterungsmethode

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
QS-Informatik
Beteilige dich an der Diskussion!
Dieser Artikel wurde wegen inhaltlicher Mängel auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+)

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.

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.

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();
  • Erweiterung beliebiger Klassen, auch Klassen, die als sealed (C#) bzw. NotInheritable (VB) definiert sind, wie System.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
  • 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

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Extension Methods - C# Programming Guide. Abgerufen am 21. März 2021 (amerikanisches Englisch).