Nehmen Sie die # -Klasse folgende C:Wie kann ich Ereignisabonnements in C# löschen?
c1 {
event EventHandler someEvent;
}
Wenn es eine Menge von Abonnements für c1
‚s someEvent
Ereignis ist, und ich will sie alle löschen, was ist der beste Weg, dies zu erreichen? Beachten Sie auch, dass Abonnements für dieses Ereignis lambdas/anonyme Delegaten sein können.
Derzeit ist meine Lösung, eine ResetSubscriptions()
Methode zu c1
hinzuzufügen, die someEvent
auf null setzt. Ich weiß nicht, ob das irgendwelche unsichtbaren Konsequenzen hat.
Oh die Wunder der objektorientierten Programmierung. –
Wenn Sie stur sind, können Sie es durch Reflektion erzwingen. Siehe http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control/91853#91853. – Brian
@Brian: Es hängt von der Implementierung ab. Wenn es * nur * ein feldähnliches Ereignis oder eine 'EventHandlerList' ist, können Sie dies möglicherweise tun. Sie müssten diese beiden Fälle jedoch erkennen - und es könnte eine beliebige Anzahl anderer Implementierungen geben. –