Interfaces doubles et événements
Bien qu’il soit possible de concevoir une interface d’événement en double, il existe plusieurs bonnes raisons de conception de ne pas le faire. La raison fondamentale est que la source de l’événement déclenche uniquement l’événement via la table virtuelle ou via Invoke
, pas les deux. Si la source d’événement déclenche l’événement en tant qu’appel de méthode vtable directe, les IDispatch
méthodes ne seront jamais utilisées et il est clair que l’interface doit avoir été une interface vtable pure. Si la source d’événement déclenche l’événement en tant qu’appel Invoke
, les méthodes vtable ne seront jamais utilisées et il est clair que l’interface doit avoir été une dispinterface. Si vous définissez vos interfaces d’événements en tant que doubles, vous devez exiger que les clients implémentent une partie d’une interface qui ne sera jamais utilisée.
Remarque
Cet argument ne s’applique pas aux interfaces doubles, en général. Du point de vue de l’implémentation, les doubles sont un moyen rapide, pratique et bien pris en charge d’implémenter des interfaces accessibles à un large éventail de clients.
Il existe d’autres raisons d’éviter les interfaces d’événements doubles ; ni Visual Basic ni Internet Explorer ne les prennent en charge.