Delegates mit .NET

Callback-Mechanismen gehören schon seit langem zum Rüstzeug eines Programmierers. In .NET führt Microsoft dieses Konzept in die nächste Stufe und eröffnet dem Entwickler ganz neue Möglichkeiten.

Callback-Mechanismen sind ein extrem wichtiger Bestandteil im Werkzeugkasten des Programmierers, um eine gewisse Flexibilität bei der Wiederverwendung von Funktionen zu erreichen. Schon die qsort-Funktion aus der Standard-C-Bibliothek verwendet einen solchen Mechanismus: Bei qsort wird nur der eigentliche Sortieralgorithmus implementiert, die dazu benötigte Vergleichsfunktion stellt der Programmierer zur Verfügung, indem er einen Zeiger auf eine passende Vergleichsfunktion übergibt. Diese nimmt zwei Argumente, nämlich die zu vergleichenden Operanden, und liefert als Ergebnis, ob der erste Operand im Vergleich zum zweiten größer, kleiner oder gleich groß ist.

Delegates erfüllen in .NET die gleiche Aufgabe wie Zeiger auf Funktionen in C oder C++. Sie bieten jedoch eine deutlich größere Menge an Funktionalität. Warum Delegates so praktisch sind, zeigt ein einfaches Beispiel.

Angenommen Sie haben Ihr Programm mit einem Logging-Mechanismus ausgestattet, um sich die Fehlersuche zu erleichtern. Alle aufgerufenen Funktionen führen dazu Informationen über ihren Aufruf und ihre Beendigung mit, indem sie eine bestimmte Funktion aufrufen. Das könnte zum Beispiel folgendermaßen aussehen:

public class AClass {
public void DoIt() {
Console.WriteLine("DoIt() wurde aufgerufen");
// hier leistet DoIt seine Arbeit
Console.WriteLine( "DoIt() wird verlassen");
}
}

Beim Eintritt in die Funktion wird eine entsprechende Bemerkung auf die Konsole ausgegeben, beim Verlassen wird ebenfalls eine passende Meldung angezeigt. Das ist praktisch, hat aber in der Art und Weise der Implementierung auch seine Nachteile.