bulwin hat folgendes geschrieben: |
Hallo zusammen,
gibt es eine Möglichkeit unter C# abzufragen, ob einem Event auch ein EventHandler zugewiesen ist?
Unter Delphi kann ich das mit "Assigned( OnClick )" machen. |
Da möchte ich noch etwas zu dem, was Klarabella schon schrieb, hinzufügen.
Ein Event ist ein spezielles Konstrukt ähnlich einer Property. Während eine Property aus Methoden besteht, die Lesen und Schreiben, besteht ein Event aus Methoden zu Hinzufügen und Entfernen eines Delegate aus dem Delegate, das als Event benutzt wird.
C#, oder auch Chrome, verstecken den Großteil davon hinter sogenannter Compiler magic.
Wenn du in deinem Code das hier stehen hast
public event EventHandler SomethingJustHappened;, dann wird eigentlich das hier daraus gemacht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private EventHandler somethingJustHappened;
public event EventHandler SomethingJustHappened { add{ somethingJustHappened += value; } remove{ somethingJustHappened -= value; } } |
Im ersten Fall hast du das Feld ja gar nicht selbst geschrieben, sondern dich darauf verlassen dass es der Compiler anlegt und als Event verpackt.
Wie willst du aber jetzt prüfen, ob du den Event auslösen kannst? Oder noch schlimmer: Wie willst du ihn denn überhaupt ausführen?
Nun, wenn du die erste (Einzeiler-)Variante gewählt hast, kannst du jetzt den Eventnamen
innerhalb deiner Klasse benutzen, als wäre er ein Feld des Delegates:
C#-Quelltext
1: 2: 3:
| EventHandler hander = SomethingJustHappened; if(handler != null) handler(this, EventArgs.Empty); |
Das ist übrigens auch gleich die StiNo-Lösung um einen Event auszulösen.
Bei der zweiten (ausführlichen) Variante, müsstest du das Feld direkt benutzen.