DevTrain

Autor: Kerstin Lahr

Der Delegate - ein typsicherer Funktionszeiger

Delegates sind ein sehr wichtiges Konzept im .NET-Framework, zu dem es in VB 6.0 kein direktes Pendant gibt.
Ein Delegate ist vergleichbar mit einem objekt-orientierten Funktionszeiger, nur dass er typsicher ist, da er außer der Funktionsadresse auch das Wissen über die Datentypen der aufzurufenden Funktion mit sich trägt.
Ein Delegate-Objekt fasst also eine bestimmte Funktionsadresse mit einer dazugehörigen Signatur zusammen, übergibt das Ganze an eine andere Klasse oder einen anderen x-beliebigen Ort und stellt so sicher, dass die Funktion nur mit der richtigen Signatur aufgerufen werden kann.

Die Verwendung eines Delegate erfolgt in drei Schritten:

1. Definition des Delegate

Delegate Sub DelegateNr1(ByVal sString As String)


Dabei entsteht zunächst eine Klasse, die instanziiert werden muss.

2. Deklaration und Instanziierung eines Objektes vom Typ der Delegate-Definition

Dim TypeD As New DelegateNr1(AddressOf Console.WriteLine)


Dabei wird die Adresse der aufzurufenden Methode über den AddressOf-Operator übergeben.

3. Aufrufen der Methode

TypeD("Dieser String wird geschrieben.")

Dabei muss die Methode die gleiche Anzahl Parameter, gleiche ParameterTypen (inklusive ReturnTyp) und gleiche Parameterarten haben.

Ein Multicast-Delegate ist ein Delegate, in dem über die Combine-Methode mehrere Delegates, die aber kompatibel bezüglich ihrer Signatur sein müssen, zusammengefasst werden. Somit lassen sich über einen einzigen Aufruf mehrere Funktionen aufrufen.

Das Interessanteste ist aber, dass der gesamte Ereignismechanismus in .NET auf Delegates basieren. Sie sind das Bindeglied zwischen Ereignissender und Ereignisempfänger, wobei sie aber nicht direkt in Erscheinung treten.

Der Befehl

AddHandler myButton.Click, AddressOf MyButton_Click

 ist eigentlich die Kurzversion für

AddHandler myButton.Click, New EventHandler(AddressOf MyButton_Click)

 wobei EventHandler der Name des implizit deklarierten Delegate ist.

Bei einem Multicast-Delegate wird der Event über AddHandler mit einer beliebigen Anzahl an Prozeduren verknüpft.
Über den RemoveHandler-Befehl kann die Verknüpfung jederzeit wieder aufgehoben werden.


Erfasst am: 15.04.2003 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=847
© Copyright 2003 ppedv AG - http://www.ppedv.de