Framework-LogoDas Reflection-API des Frameworks ist ausgesprochen mächtig. Für das Ermitteln von Informationen über Assemblies gibt es im Netz eine Menge Hinweise. Alle enden damit, dass eine Beispielanwendung verdeutlicht, wie eine Methode in einer Assembly bestimmt und aufgerufen wird (Late-Binding). Kaum eine Quelle jedoch verrät, wie es sich mit Event-Handlern verhält.

Bei Event-Handlern handelt es sich um Aufruf von Funktionen im Hauptprogramm zur Behandlung von Events, die in der Komponente erzeugt werden. Hier tritt also der umgekehrte Weg in Erscheinung, wir rufen nicht auf sondern wir möchten aufgerufen werden... Dafür gibt es Delegaten. Doch die Erstellung eines geeigneten Delegaten scheint nicht trivial. Hier ein Beispiel für die korrekte Implementierung eines Event-Handlers. Wichtig ist, dass die aufgerufene Funktion exakt die gleiche Parametrierung besitzt, wie es das Event erfordert.

'Zuerst ermitteln wir für das Objekt den entsprechenden Event (z. B. "Message"), bei uns also das referenzierte Objekt myObjektRef:
Dim myObjType as Type = myObjektRef.GetType()

Dann wird die EventInfo-Struktur abgefragt:
Dim myEventInfo as Reflection.EventInfo = myObjType.GetEvent("Message")

Jetzt holen wir uns den entsprechenden Handler-Typen aus der Struktur
Dim myHandlerType as Type = myEventInfo.EventHandlerType

Nun verknüpfen wir das Event:
Dim myHandler as System.Delegate
myHandler = System.Delegate.CreateDelegate(myHandlerType, me, "Message_Handler")

Das bedeutet so viel wie: Verknüpfe das Ereignis, welches durch myHandlerType definiert wird ("Message") mit der Prozedur "Message_Handler" in meinem aktuellen Assembly.

Zuletzt wird der Handler dem eigentlichen Objekt übergeben, dass das Event bereitstellt::
myEventInfo.AddEventHandler(myObjektRef, myHandler)

Gar nicht so schwer, gell?


Du darfst keine Kommentare posten!

Tagesschau

Die aktuellen Beiträge der Seite https://www.tagesschau.de/infoservices/alle-meldungen-100.html