Autor Beitrag
bulwin
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 01.07.07 09:19 
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.

Gruß Bulwin.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 01.07.07 11:11 
In diesem Punkt unterscheiden sich Funktionszeiger und Delegates nicht.
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: So 01.07.07 14:30 
user profile iconbulwin 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:
ausblenden 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:
ausblenden 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.
bulwin Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 11.07.07 10:23 
Danke für die Ausführlich beantwortetung.

Hat so hingehauen, wie ich wollte.

Gruß Bulwin