双接口和事件

虽然可以将事件接口设计为双重接口,但是出于设计方面的诸多原因最好不要这样。 根本原因是事件源只会通过 vtable 或 Invoke 而非两者,触发事件。 如果事件源将事件作为直接 vtable 方法调用激发,则永远不会使用方法 IDispatch,并且很明显接口应该是纯 vtable 接口。 如果事件源将事件作为对 Invoke 的调用激发,则永远不会使用 vtable 方法,并且很明显接口应该是 disinterface。 如果将事件接口定义为双接口,则需要客户端实现永远不会使用的接口的一部分。

注意

此参数通常不适用于双接口。 从实现的角度来看,双接口是实现各种客户端可访问的接口的快速、便捷且受支持的方法。

此外,还有更多避免使用双事件接口的理由:Visual Basic 和 Internet Explorer 都不支持它们。

另请参阅

双重接口和 ATL