C# Delegates

Bei Delegaten handelt es sich um Funktionszeiger. Dass bedeutet, dass man in einem Delegaten Die Referenz auf eine (oder auch mehrere) Funktionen speichern kann. Man kann damit also einen Methoden-Aufruf in einer Variablen speichern.

Definition eines Delegaten:

public delegate int Calculate(int num1, int num2);

Bei der Definition des Delegaten wir der Rückgabe und die Methoden-Signatur angegeben. Die Methoden-Signatur muss genau der Methode entsprechen, deren Referenz in dem Delegaten gespeichert werden soll. Eine gültige Methode sieht also z.B. so aus:

public int Additon(int num1, int num2)
{
  return num1 + num2;
}

Nun muss nur noch der Aufruf der Methode in einer Instanz des Delegaten gespeichert werden:

Calculate Rechenoperation = new Calculate(Addition);
int result = Rechenoperation(10, 20);

Beim Instanziieren des Delegaten, wird die Methode, deren Referenz gespeichert werden soll, als Parameter übergeben. Danach kann der Delegat mit entsprechenden Parametern aufgerufen werden und die in ihm gespeicherte Methode wird genau mit diesen Parametern ausgeführt.

An dieser Stelle hat sich mir die Frage nach der Sinnhaftigkeit des Ganzen gestellt, denn warum muss ich die Verrenkung mit dem Delegaten machen, wenn ich ihn am Ende genauso aufrufe wie die Methode selbst, die in ihm gespeichert ist. 🤔

Nachdem ich mich mit dem Thema Events beschäftigt habe, ist mir dann der Sinn dieser Konstruktion wirklich klar geworden.