C#: Erweiterungsmethoden
Die Sprache bietet ja so oder so schon ziemlich nette Annehmlichkeiten. So habe ich bei Variablen des Typen “string” bereits einige nützliche Methoden zur Auswahl wie ToLower(), ToUpper(), Trim(), Remove(), Replace(), Split(), ToCharArray() und viele mehr. Diese erledigen für Otto-Normal-Programmierer wohl 80 % der täglichen Arbeit.
Doch was tun, wenn genau diese Funktionen nicht mehr helfen können oder ein Workaround zu unschönem und unübersichtlichem Quelltext führen? Genau dafür bringt C# eine pfiffige Lösung: Die Erweiterungsmethoden.
Fangen wir erstmal vorne an. Erweiterungsmethoden dienen, wie der Name schon sagt, zum Erweitern von Objekten. Es können also im Prinzip jedem Objekt Funktionen nachträglich beigebracht werden. Das ist immer dann von Vorteil, wenn man komplexere Prüfungen oder Verfahren jedem Objekt verfügbar machen möchte, ohne dabei neue Klassen o.ä. zu erstellen.
Nehmen wir als Beispiel eine Variable vom Typ string. Neben vielen schönen Funktionen gäbe es aber in manchen Anwendungsgebieten auch die Notwendigkeit weiterer Funktionen. Gerade bei Textverarbeitung o.ä. wäre es gut, wenn wir eine Funktion hätten, die uns die Anzahl der Worte oder der Umlaute zurückgibt.
Dazu erstellen wir eine statische Klasse mit einer statischen Methode. Als Übergabe Parameter bekommen Erweiterungsmethoden immer ein “this” und dahinter folgt der Typ, der erweitert werden soll, samt Variablennamen für die Funktion.
Wörter zählen:
public static int WordCount(this string str) { return str.Split(' ', StringSplitOptions.RemoveEmptyEntries).Length; } string meinText = "Das ist nur ein kleiner Test!" int anz = 0; anz = meinText.WordCount() // anz = 5
Schon haben wir die Möglichkeit uns die Anzahl an Wörtern zurückgeben zu lassen. Das Gleiche funktioniert auch wunderbar mit Sonderzeichen, was man gebrauchen könnte, sobald Sonderzeichen einen Fehler auslösen oder Ähnliches.
Sonderzeichen zählen:
public static int SpecialCount(this string str) { return str.Split(new char[] { 'ö', 'ü', 'ä', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } string meinText = "Däs ist nür ein kleiner Teßt!" int anz = 0; anz = meinText.SpecialCount() // anz = 3
Es gibt noch eine Vielzahl von Möglichkeiten für eine solche Funktion. Anzahl an Kommentaren, Zeilenumbrüchen und viele mehr. In manchen Einsatzgebieten ist es allerdings notwendig den eigenen Wert der Variable zu ändern und diese nicht via “return” an eine weitere Variable weiterzugeben. Leider erlaubt uns C# hier nur die Weitergabe über einen out Parameter, den wir dann nutzen können.
Werte setzen:
public static bool IsZero(this int oldValue, out int newValue, int max) { if (oldValue > max) newValue = max; return true; } int zahl = 1020; zahl.IsGreater(zahl, 1000); // zahl = 1000;
Wir können bei den Erweiterungsmethoden aber nicht auf einen Return-Type verzichten. Das heißt, dass jede Funktion einen Rückgabe-Wert haben muss. Ich hoffe, ich konnte Euch diese Art der Variablen-Nutzung ein wenig näher bringen und wünsche viel Spaß beim Testen – Cherryo!
Wie immer gilt: Dies ist freier Code, Ihr könnt Ihn einsetzen, wie und wo Ihr wollt!
Leave a comment