Duale Schnittstellen und Ereignisse
Obwohl es möglich ist, eine Ereignisschnittstelle als Dual zu entwerfen, gibt es eine Reihe von guten Entwurfsgründen, dies nicht zu tun. Der Grund dafür ist, dass die Quelle des Ereignisses nur das Ereignis über die vtable oder über Invoke
, nicht beides auslösen wird. Wenn die Ereignisquelle das Ereignis als direkten vtable-Methodenaufruf auslöst, werden die IDispatch
Methoden nie verwendet, und es ist klar, dass die Schnittstelle eine reine vtable-Schnittstelle sein sollte. Wenn die Ereignisquelle das Ereignis als Aufruf Invoke
auslöst, werden die vtable-Methoden nie verwendet, und es ist klar, dass die Schnittstelle eine Dispinterface sein sollte. Wenn Sie Ihre Ereignisschnittstellen als Duals definieren, müssen Sie Clients einen Teil einer Schnittstelle implementieren, die niemals verwendet wird.
Hinweis
Dieses Argument gilt im Allgemeinen nicht für duale Schnittstellen. Aus Implementierungsperspektive sind Duals eine schnelle, bequeme und gut unterstützte Methode der Implementierung von Schnittstellen, die für eine vielzahl von Clients zugänglich sind.
Es gibt weitere Gründe, duale Ereignisschnittstellen zu vermeiden; Weder Visual Basic noch Internet Explorer unterstützen sie.