Take następujące klasy C#:Jak mogę wyczyścić subskrypcje zdarzeń w języku C#?
c1 {
event EventHandler someEvent;
}
Jeśli istnieje wiele prenumeraty someEvent
imprezy c1
„s i chcę je wszystkie usunąć, co jest najlepszym sposobem osiągnięcia tego celu? Należy również wziąć pod uwagę, że subskrypcje tego wydarzenia mogą być/są delegatami lambdas/anonymous.
Obecnie moje rozwiązanie polega na dodaniu metody ResetSubscriptions()
do c1
, która ustawia someEvent
na wartość null. Nie wiem, czy ma to jakieś niewidoczne konsekwencje.
O cudach programowania obiektowego. –
Jeśli jesteś uparty, możesz go wymusić poprzez odbicie. Zobacz http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control/91853#91853. – Brian
@Brian: To zależy od implementacji. Jeśli jest to * tylko * zdarzenie podobne do pola lub 'EventHandlerList', możesz być w stanie. Musisz jednak rozpoznać te dwie sprawy - i może istnieć dowolna liczba innych implementacji. –