Erweiterungsfunktionen in C# 3.0

Erweiterungsfunktionen werden ab C# 3.0 unterstützt. Sie ermöglichen das nachträgliche Hinzufügen von Member-Funktionen zu Klassen und Schnittstellen.

Versiegelte Klassen können ebenso erweitert werden, wie Klassen anderer Assemblies. Erweiterungsfunktionen können bestehende Funktionen nicht überschreiben oder verdecken. Bestehende Funktionen haben gegenüber Erweiterungsfunktionen Vorrang.

Um Erweiterungsfunktionen nutzen zu können, muss der Namensraum der Klasse, die die gewünschten Funktionen enthält, mit Hilfe der using-Klausel eingebunden werden.

Besonderheiten

Erweiterungsfunktionen werden immer als statische Funktion realisiert. Daher ist ein Aufruf über null-referenzierte Objekte prinzipiell möglich. Dies steht jedoch im Gegensatz zu echten Member-Funktionen, die selbst dann nicht über Null-Referenzen aufgerufen werden können, wenn sie gar keine Member-Elemente benutzen.

Einsatzgebiete

Der Einsatz von Erweiterungsfunktionen sollte wohlüberlegt werden. Die Benutzung einer Erweiterungsfunktion ist in Bezug auf die implementierende Klasse immer implizit. Es ist also im Quellcode nicht erkennbar, dass es sich beim Aufruf einer Erweiterungsfunktion um eine solche handelt.

Funktionen für Listen bestimmter Elemente als Erweiterungsfunktionen zu realisieren, schafft sehr viele Vorteile. Die folgende Erweiterungsfunktion wird für alle Listen bereitgestellt, die IList<GraphicObject> implementieren. Sie steht dadurch automatisch für typisierte Arrays, Listen und Kollektionen zur Verfügung.

public static int DoSomething(this IList collection);

Beim Implementieren muss nicht mehr bekannt sein, welche Klasse die Erweiterungsfunktion bereitstellt, da die Funktion automatisch für alle mit IList<GraphicObject> kompatiblen Objekte angeboten wird.

Ein weiteres Beispiel für die sinnvolle Verwendung von Erweiterungsfunktionen ist der Einsatz für häufig benutzte Klassen. Beispielsweise bietet sich die Erweiterung der Klasse String mit individuell benötigten Funktionen an.

Erweiterungsfunktionen stellen in .NET die Grundlage für LINQ (Language Integrated Query) dar.

Ähnliche Artikel

Schreiben Sie einen Kommentar