Hallo.
(Begrüßung ist i.a. nicht schlecht…)
Ich habe schon mehrfach mit Event Handler programmiert, aber
ich habe immer noch nicht die ganzen bezeichnungen drauf?
Wie nennt/ bezeichnet man die Methode, die bei einem Event (z.
B. TextChanged) registriert wird?
„Event Handler“ ??
Genau. Oder auf deutsch „Ereignisbehandlungsroutine“.
Wie bezeichnet man die protected Methode, die das eigentliche
Event (in diesem Beispiel NewMessageReceived) auslöst?
protected virtual void
OnNewMessageReceived(NewMessageReceivedEventArgs e)
{
if (this.NewMessageReceived != null)
{
this.NewMessageReceived(this, e);
}
}
??
Ich wüsste nicht, dass es dafür einen speziellen Namen gäbe.
Es ist ja „nur“ ein von Microsoft in den best practices vorgeschlagener Weg, das Feuern des Event zu zentralisieren, damit man nicht an jeder Stelle auf null prüfen muss.
Kann die Methode auch noch weiteren Code beinhalten z. B.
LogThisEvent() ?
Natürlich.
Ich suche nach passenden Begriffen, die ich zur Bezeichnung
der #Regions nutzen kann.
Ich persönlich packe die Event-Deklaration immer zusammen mit den Methoden zum Feuern in eine gemeinsame „Events“-Region, aber das ist Geschmackssache.
Noch eine Frage:
Warum muss ich sowohl ein event als auch ein delegate
deklarieren?
Event deklarieren ist klar, oder? Sonst gibt es den einfach nicht.
Delegate (selbst) deklarieren musst Du nicht immer.
Es geht beim delegate nur um die Signatur der Ereignisbehandlungsroutine, also Anzahl und Typ der Parameter und den Rückgabetyp.
Wenn es für die betreffende Signatur schon eine Deklaration gibt, kannst Du natürlich auch die verwenden.
Du musst also bspw. nicht
public delegate void MyEventHandlingDelegate(object sender, EventArgs e);
deklarieren, das gibt’s schon unter dem Namen EventHandler.
Warum müssen diese beiden Member public sein?
Müssen sie nicht. Macht aber meistens Sinn, weil Ereignisse für einen Clienten bereitgestellt werden, der die Klasse benutzt.
Und wenn Du das Event private machst, sieht der Client es logischerweise nicht.
Warum sind delegates manchmal auch statisch und keine Class
Members?
Weil es auch events gibt, die sich eben nicht auf eine Instanz einer Klasse beziehen. Bspw. könnte man einen statischen event definieren, der ausgelöst wird, wenn eine Instanz der betreffenden Klasse erzeugt wird.
Damit feuert die Klasse selbst den Event und ein Client braucht dann keinen Instanzbezug, kann also auch statisch sein.
Oder, wenn es sich um einen Instanz-Event handelt, aber bei dessen Behandlung kein Zugriff auf Instanz-Member erfolgen muss, dann kann der Event Handler ruhig static sein.
Gruß,
Martin
(ein Gruß am Ende schadet auch nicht)