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 Invoke
metody , 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 Invoke
metody , 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.