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.

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! (+)

Anwendung 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

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

  • 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

Nachteile 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

Weblinks Bearbeiten

Einzelnachweise Bearbeiten

  1. Extension Methods - C# Programming Guide. Abgerufen am 21. März 2021 (amerikanisches Englisch).