Udostępnij za pośrednictwem


Podwójne interfejsy i zdarzenia

Chociaż istnieje możliwość zaprojektowania interfejsu zdarzeń jako podwójnego, istnieje wiele dobrych powodów projektowych, aby tego nie robić. Podstawowym powodem jest to, że źródło zdarzenia będzie uruchamiać tylko zdarzenie za pośrednictwem tabeli wirtualnej lub za pośrednictwem Invokemetody , a nie obu. Jeśli źródło zdarzeń uruchamia zdarzenie jako wywołanie metody bezpośredniej tabeli wirtualnej, IDispatch metody nigdy nie będą używane i jest jasne, że interfejs powinien być czystym interfejsem vtable. Jeśli źródło zdarzeń uruchamia zdarzenie jako wywołanie Invokemetody , metody vtable nigdy nie będą używane i jest jasne, że interfejs powinien być dispinterface. Jeśli zdefiniujesz interfejsy zdarzeń jako podwójne, będziesz wymagać od klientów zaimplementowania części interfejsu, który nigdy nie będzie używany.

Uwaga

Ten argument nie ma zastosowania do podwójnych interfejsów, w ogóle. Z perspektywy implementacji podwójne są szybkim, wygodnym i dobrze obsługiwanym sposobem implementowania interfejsów, które są dostępne dla szerokiej gamy klientów.

Istnieją dalsze powody, aby uniknąć podwójnych interfejsów zdarzeń; Ani Visual Basic, ani Internet Explorer nie obsługują ich.

Zobacz też

Podwójne interfejsy i ATL