Wird geladen...

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


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


TL;DR

  • Erweiterungsmethoden sind eine Möglichkeit, bestehenden Klassen neue Funktionen hinzuzufügen.
  • Sie werden in einer static-Klasse definiert; der erste Parameter mit this gibt 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