Sobes.tech
Junior

Was ist ein Delegat in C#?

sobes.tech KI

Antwort von AI

Ein Delegate ist ein Referenztyp, der mit dem Schlüsselwort delegate deklariert wird. Er kapselt eine Methode mit einer bestimmten Signatur (Rückgabetyp und Parameter). Im Wesentlichen ist ein Delegate ein typsicher Zeiger auf eine Methode.

Hauptmerkmale von Delegates:

  • Methodeninkapselung: Das Delegate speichert Informationen über die Methode, auf die es verweist.
  • Typsicherheit: Das Delegate kann nur auf Methoden verweisen, deren Signatur genau mit der Signatur des Delegates übereinstimmt.
  • Multicast: Delegates können gleichzeitig auf mehrere Methoden verweisen. Beim Aufruf eines Delegates werden alle zugehörigen Methoden in der Reihenfolge ihres Hinzufügens aufgerufen.

Beispiel für Deklaration und Verwendung:

// Delegate-Deklaration
public delegate int MyDelegate(int x, int y);

// Methode, die mit der Signatur des Delegates übereinstimmt
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Verwendung des Delegates
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Erstellen einer Delegate-Instanz und Verknüpfung mit der Methode Add
        MyDelegate del = new MyDelegate(calc.Add);

        // Aufruf der Methode über das Delegate
        int result = del(5, 3);
        System.Console.WriteLine(result); // Ausgabe: 8
    }
}

Mit der Einführung von .NET Framework 3.5 und LINQ wurden die integrierten generischen Delegates weit verbreitet:

  • Action<T1, ..., Tn>: Delegat, der keinen Wert zurückgibt (void). Kann 0 bis 16 Parameter verschiedener Typen annehmen.
  • Func<T1, ..., Tn, TResult>: Delegat, der einen Wert vom Typ TResult zurückgibt. Kann 0 bis 16 Parameter verschiedener Typen annehmen.
  • Predicate<T>: Delegat, der einen Parameter vom Typ T akzeptiert und einen booleschen Wert zurückgibt. Wird zur Überprüfung von Bedingungen verwendet.

Vergleichstabelle der integrierten Delegates:

Delegate Rückgabewert Parameter Anwendungsbeispiel
Action void 0..16 Parameter Ausführen einer Aktion ohne Rückgabewert
Func<TResult> TResult 0 Parameter + Rückgabewert TResult Berechnung ohne Eingabedaten
Func<T, TResult> TResult 1 Parameter vom Typ T + Rückgabewert TResult Werttransformation
Predicate<T> bool 1 Parameter vom Typ T Bedingungsprüfung

Delegates werden häufig bei der Ereignisbehandlung, asynchronen Operationen, LINQ und für Callback-Implementierungen verwendet.