Ich bin ziemlich zufrieden mit meinem Verständnis des .NET-Ereignismodells. Ich denke, ich könnte eine kleine Nuance des Systems missverstehen.
Als ich anfing, Events in meine Klassen aufzunehmen, habe ich die Standardmethode wie folgt verwendet:
public event EventHandler<MyEventArgs> MyEvent;
Dies bedeutete, dass alles, was das Ereignis abonniert, eine Methode wie die folgende benötigt:
void HandleThatEvent(object sender, MyEventArgs args){...}
Was nett ist, aber ich fand, dass ich mich selten um den Absender kümmern würde, so dass viele Methodensignaturen aufgebläht wurden.
Also habe ich meine eigenen Delegiertentypen deklariert
public delegate void MyEventHandler(SomeClass argument);
Was die Unordnung einschränkt, mir aber ein kleines Problem beim Schreiben von Handlern hinterlässt:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Also müsste ich zur Erklärung des Delegierten zurückkehren und nachsehen und sie dann zurückschreiben oder kompilieren und warten, bis sie mir mitgeteilt werden.
Also verwende ich stattdessen einfach eine Vorlage Action
, Action<T>
oder welche auch immer passt.
public event Action<SomeClass> MyEvent;
Damit ich über das Ereignis schweben und erfahren kann, welche Parameter es erwartet.
Meine Frage nach all dem: Gibt es eine bewährte Methode zum Deklarieren von Ereignissen in C #? Soll ich auf den EventHandler<T>
Weg zurückgehen, oder ist das Action<T>
akzeptabel?