COM 区分接口定义及其实现。
接口 实际上是一个协定,它包含一组相关函数原型,其用法是定义的,但其实现不是。 这些函数原型等效于C++编程中的纯虚拟基类。 接口定义指定接口的成员函数,称为 方法、它们的返回类型、参数的数量和类型以及它们必须执行的作。 没有与接口关联的实现。
接口实现 是程序员提供的代码,用于执行接口定义中指定的作。 编程人员可在基于对象的应用程序中使用的许多接口的实现包含在 COM 库中。 但是,程序员可以自由地忽略这些实现并编写自己的实现。 创建该对象的实例时,接口实现将与对象相关联,并且该实现提供该对象的服务。
例如,名为 IStack 的假设接口可以定义两个方法,即 Push 和 Pop,指定对 Pop 方法的连续调用按相反顺序返回以前传递给 Push 方法的值。 此接口定义不会指定如何在代码中实现函数。 在实现接口时,一位程序员可以将堆栈实现为数组并实现 Push 和 Pop 方法,以便访问该数组,而另一个程序员可能使用链接列表并相应地实现方法。 无论推送和 Pop 方法的特定实现如何,指向 IStack 接口的指针的内存中表示形式,因此客户端使用它完全由接口定义决定。
简单对象仅支持单个接口。 更复杂的对象(如可嵌入的对象)通常支持多个接口。 客户端只能通过指向其中一个接口的指针访问 COM 对象,这反过来又允许客户端调用构成该接口的任何方法。 这些方法确定客户端如何使用对象的数据。
接口定义对象与其客户端之间的协定。 协定指定必须与每个接口关联的方法,以及每个方法的行为在输入和输出方面必须是什么。 协定通常不定义如何在接口中实现方法。 协定的另一个重要方面是,如果对象支持接口,它必须以某种方式支持该接口的所有方法。 并不是实现中的所有方法都需要执行某些作。 如果对象不支持方法隐含的函数,则其实现可能是简单的返回,也可能是有意义的错误消息的返回,但方法必须存在。
相关主题