2009-01-19 7 views
5

W klasie .Net klasa Component ujawnia zdarzenie Disposed. Zapewnia również chroniony członek OnDispose(bool disposing).Najlepsza praktyka: Zastąp pozycję OnDispose (ustawienie bool) względem zdarzenia Disposed w komponencie

Jaka jest najlepsza praktyka dla niestandardowego komponentu, który rozszerza się o Component? Zastąpić OnDispose(bool) lub dołączyć procedurę obsługi zdarzeń do Disposed na budowie?

Mam przeczucie, że należy zastąpić OnDispose(bool) i przypieczętować zajęcia.

Myśli?

Odpowiedz

6

Zazwyczaj wydarzenia są wykorzystywane przez konsumentów, aby mogli być powiadamiani o zdarzeniach. Jeśli rozszerzasz typ i musisz wyczyścić zasoby, powinieneś zastąpić Dispose (bool disposing)

Spence ma częściowo rację co do obsługi zdarzeń, można przypisać wiele zdarzeń, ale problem polega na tym, że nie możesz zagwarantować kolejność, w której obsługiwane są Zdarzenia.

Pieczętowanie klasy często zależy od tego, co projektujesz.

Reguła FxCop ma też jakąś dobrą informację: http://msdn.microsoft.com/en-us/library/ms244737(VS.80).aspx

+0

+1 dla linku do reguły FxCop –

2

Polecam, aby zmienić zachowanie, ponieważ osoba realizująca komponent ma dostęp do obsługi zdarzenia i jako taka może przypadkowo zdyskretyzować implementację disposer. Wydaje mi się, że być może będziesz musiał to zrobić w zależności od tego, co robi Twój niestandardowy komponent, ponieważ możesz potrzebować uruchomić swoje zadania utylizacyjne przed wywołaniem do bazowego urządzenia do unieszkodliwiania, jeśli masz obiekty stanowe lub zewnętrzne interfejsy.

1

Jak kiedykolwiek słyszał o tej sprawie jest to standardowa .Net że spadkobiercami zastąpić klasę bazową OnXxxxx metody obsługi zdarzeń i użytkowników xxxxx.