Sobes.tech
Junior

Was sind Delegates in C# und wofür werden sie verwendet?

sobes.tech KI

Antwort von AI

Delegates in C# sind typsichere Zeiger auf Methoden. Sie kapseln eine Methode, sodass sie als Parameter übergeben oder als Variablentyp verwendet werden kann.

Sie werden verwendet für:

  • Implementierung des Beobachter-Musters (Observer): Ereignisse in C# basieren auf Delegates. Der Herausgeber benachrichtigt die Abonnenten, indem er den Delegate aufruft.
  • Callbacks: Eine Methode als Argument an eine Funktion übergeben, die sie später aufruft.
  • Generische Programmierung: Die Delegates Action und Func ermöglichen die Erstellung generischer Methoden, die mit verschiedenen Signaturen arbeiten.
  • Parallele und asynchrone Programmierung: Methoden, die in anderen Threads oder asynchron ausgeführt werden, werden oft über Delegates übergeben.
  • LİNQ: LINQ-Operatoren verwenden aktiv Delegates, um Filterbedingungen, Transformationen usw. zu definieren.

Beispiel für die Deklaration und Verwendung eines Delegates:

// Deklaration eines Delegates mit der Signatur void und einem Argument vom Typ int
public delegate void MyDelegate(int x);

public class MyClass
{
    public void PrintNumber(int num)
    {
        Console.WriteLine($"Zahl: {num}");
    }

    public static void Main(string[] args)
    {
        // Erstellen einer Delegat-Instanz, die auf die Methode PrintNumber zeigt
        MyDelegate del = new MyDelegate(new MyClass().PrintNumber);

        // Aufruf der Methode über den Delegate
        del(10);
    }
}

Beispiel mit Action (für void-Methoden ohne Rückgabewert):

using System;

public class OtherClass
{
    public void ExecuteAction(Action action)
    {
        action(); // Ausführen des übergebenen Delegates
    }

    public static void Main(string[] args)
    {
        Action myAction = () => Console.WriteLine("Hallo aus Action!");
        new OtherClass().ExecuteAction(myAction);
    }
}

Beispiel mit Func (für Methoden mit Rückgabewert):

using System;

public class ThirdClass
{
    public int Calculate(Func<int, int, int> operation, int a, int b)
    {
        return operation(a, b); // Ausführen der übergebenen Operation und Rückgabe des Ergebnisses
    }

    public static void Main(string[] args)
    {
        Func<int, int, int> add = (x, y) => x + y;
        int result = new ThirdClass().Calculate(add, 5, 3);
        Console.WriteLine($"Ergebnis der Addition: {result}");
    }
}