Erweiterungsmethoden in C#
Lernen Sie Erweiterungsmethoden in C#, um bestehenden Typen neue Funktionen hinzuzufügen, ohne den Code zu ändern.
In C# bieten Erweiterungsmethoden eine Möglichkeit, bestehenden Klassen oder Strukturen (struct)
neue Methoden hinzuzufügen, ohne deren Quellcode zu ändern.
Diese Methoden werden in einer static-Klasse definiert, wobei der erste Parameter mit dem Schlüsselwort
this den erweiterten Typ angibt.
Erweiterungsmethoden erhöhen die Funktionalität, während die ursprünglichen Typen unverändert bleiben.
Grundlegende Syntax
Eine Erweiterungsmethode muss immer in einer static-Klasse definiert werden.
Ihr erster Parameter ist mit this markiert, um den Typ anzugeben, den sie erweitert.
// Definition einer Erweiterungsmethode
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string? text)
{
return string.IsNullOrEmpty(text);
}
}
class Program
{
static void Main()
{
string s1 = null;
string s2 = "Hallo";
Console.WriteLine(s1.IsNullOrEmpty()); // True
Console.WriteLine(s2.IsNullOrEmpty()); // False
}
}
Hier ist die Methode IsNullOrEmpty in StringExtensions definiert,
kann aber so verwendet werden, als ob sie Teil des string-Typs wäre.
Einsatzgebiete von Erweiterungsmethoden
- Bestehenden Klassen neue Funktionen hinzufügen (z. B.
string,DateTime). - Häufige Hilfsmethoden mit einer natürlicheren Syntax aufrufen.
- Flüssiges (fluent) Codieren wie bei LINQ erleichtern.
Praktische Beispiele
Erweiterungsmethoden machen alltägliche Operationen lesbarer und komfortabler.
// Erweiterungsmethoden für Ganzzahlen
public static class IntExtensions
{
// Ist die Zahl gerade?
public static bool IsEven(this int number) => number % 2 == 0;
// Ist die Zahl ungerade?
public static bool IsOdd(this int number) => number % 2 != 0;
}
class Program
{
static void Main()
{
int x = 10;
Console.WriteLine(x.IsEven()); // True
Console.WriteLine(x.IsOdd()); // False
}
}
Hier sind IsEven und IsOdd so definiert, als gehörten sie zum int-Typ.
Jede int-Variable kann diese Methoden direkt verwenden.
// Erweiterungsmethode für DateTime
public static class DateTimeExtensions
{
// Prüft, ob das Datum auf ein Wochenende fällt
public static bool IsWeekend(this DateTime dt)
=> dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday;
}
class Program
{
static void Main()
{
DateTime today = DateTime.Now;
Console.WriteLine(today.IsWeekend() ? "Wochenende" : "Wochentag");
}
}
LINQ und Erweiterungsmethoden
Alle LINQ-Methoden sind als Erweiterungsmethoden implementiert.
Zum Beispiel sind Where, Select und OrderBy
Erweiterungsmethoden, die für IEnumerable<T> geschrieben wurden.
var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
// Where ist tatsächlich eine Erweiterungsmethode
var evens = numbers.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens)); // 2, 4, 6
Beispiel: String-Manipulation
Definieren wir Erweiterungsmethoden, um Prüfungen und Formatierungen für Texte vorzunehmen.
public static class TextExtensions
{
// Wandelt einen String in Titel-Schreibweise um (jedes Wort mit Großbuchstaben)
public static string ToTitleCase(this string text)
{
if (string.IsNullOrWhiteSpace(text)) return string.Empty;
return string.Join(" ",
text.Split(' ', StringSplitOptions.RemoveEmptyEntries)
.Select(w => char.ToUpper(w[0]) + w.Substring(1).ToLower()));
}
// Prüft, ob ein String Ziffern enthält
public static bool ContainsDigit(this string text)
{
return text.Any(char.IsDigit);
}
}
class Program
{
static void Main()
{
string input = "hallo welt 2025";
Console.WriteLine(input.ToTitleCase()); // "Hallo Welt 2025"
Console.WriteLine(input.ContainsDigit()); // True
}
}
Vorteile
- Verbessert die Lesbarkeit durch natürliche Syntax.
- Ermöglicht die Wiederverwendung bestehender Klassen, ohne neue zu erstellen.
- Fügt neue Funktionen hinzu, ohne bestehende Typen zu ändern.
- Hilfsmethoden können an einem zentralen Ort gesammelt werden.
TL;DR
- Erweiterungsmethoden sind eine Möglichkeit, bestehenden Klassen neue Funktionen hinzuzufügen.
- Sie werden in einer
static-Klasse definiert; der erste Parameter mitthisgibt den erweiterten Typ an. - LINQ-Methoden sind die bekanntesten Beispiele für Erweiterungsmethoden.
- Sie erhöhen die Lesbarkeit des Codes und bieten mehr Flexibilität.
Ähnliche Artikel
Interfaces und Abstrakte Klassen in C#
Lernen Sie Interfaces und abstrakte Klassen in C#, ihre Unterschiede und den Einsatz für sauberes, erweiterbares Design.
Lambda-Ausdrücke in C#
Lernen Sie Lambda-Ausdrücke in C#, einschließlich Kurzsyntax, Func- und Action-Delegates und LINQ-Beispiele.
Methoden und Parameterverwendung in C#
Lernen Sie Methoden und die Verwendung von Parametern in C#, einschließlich Wert- und Referenzparametern sowie optionalen Parametern.
Namespaces und Assemblies in C#
Erlernen Sie die Konzepte von Namespaces und Assemblies in C#, um Code zu strukturieren und Abhängigkeiten korrekt zu verwalten.
SOLID-Prinzipien mit C#
SOLID-Prinzipien mit C#-Beispielen: flexiblen, wartbaren und testbaren Code erstellen.
String-Operationen in C#
Lernen Sie die String-Verarbeitung in C#: Verkettung, Suche, Substring, IndexOf und weitere wichtige String-Methoden.