增强软件部件时,Visual Basic 提供了两种保持向后兼容的机制— 即“版本兼容”特性和 Implements 特性。
对于用早期版本编译的程序,Visual Basic 的“版本兼容”特性可以在保持向后兼容的同时增强部件。“属性”对话框“部件”选项卡的“版本兼容”包含三个选项:
注意 这是 Visual Basic 5.0 的工程兼容的改变,如果任意一个类不再是二进制兼容了,那么该工程所有的类 ID 和接口 ID 都将改变。
重点 在释放部件的兼容版本方面,“工程兼容”和“不兼容”一样。
然而,如果您选择忽略警告,部件也会保留接口 ID。只有在当编译器决定更改是在过程 ID 中,或是一个方法的签名,该选项才可用。
小心 如果您绝对肯定所做的修改不会影响兼容性,那么应该只选择“忽略”按钮。如果您不是绝对的肯定,请选择安全的做法并且选择“Accept”按钮,以允许接口 ID 能够被更改。
重点 违反编译器警告的选项代表了一个从 Visual Basic 5.0 的更改。在继续进行该选项之前,对不兼容更改的含义有全面的了解是非常重要的。
注意 谈论“版本兼容”时,通常是指“二进制兼容”。
下面介绍如何适当使用这些选项。
Implements 语句允许向类模块中增加多个接口,这在《Visual Basic 程序员指南》的“部件设计的一般准则”里的“多态性、接口、类型库和 GUID”和“通过接口的实现提供多态性”,以及“用对象编程”的“多态性”中介绍。
多接口可以使系统不断进化,无需破坏已有部件或进行大量的重新编译,因为已释放的接口永远不会改变。另一方面,可以通过创建新接口向系统增加新的功能。
这种方法非常接近部件对象模块 (COM) 的设计思想,而 ActiveX 规范正是基于部件对象模块的。
注意 “版本兼容”的“二进制兼容性”选项与 Implements 和多接口一起使用时是很有用的,可以防止对类的缺省接口的修改。
如果决定使用“版本兼容”特性,下面这些规则对于决定何时使用不同的选项会有所帮助:
如果是在已有部件的新版本上开始工作,那么进行增强的唯一办法就是打破向后兼容性。此时,在第一次编译工程时设置“不兼容”。这可以保证在开始时标识符清单是空白的,而已有的程序不会错误地试图使用不兼容的版本。
在编译不具有兼容性的现有工程之前,还要
在“二进制版本兼容性的级别”中详细讨论了这些项目。
用“不兼容”进行编译后,切换到“工程兼容”简化开发任务。
开发部件的第一个版本时应使用“工程兼容”。“工程兼容”保留类型库标识符,这样就不需要经常设置测试工程对部件工程的引用了。
使用“工程兼容”还可以使测试时在部件工程和已编译部件之间切换更加容易。
“工程兼容”在“工程兼容性:避免引用丢失”中讨论。
如果希望用早期版本编译的应用程序能够在新版本下工作,那么在开发任何部件的第二个版本时应该切换到“二进制兼容”。
切换到“二进制兼容”在相关主题“为兼容性提供参考点”中讨论。
如果使用多接口和 Implements 语句来提供向后兼容性,不要使用“二进制兼容”修改已定义为使用 Implemens 的抽象接口。
要增强部件的任何一个接口,Visual Basic 会修改接口的 ID。通过增加接口来改进软件的技术依赖于接口不变性。就是说接口一旦定义就永不修改— 包括接口 ID。
详细信息 关于使用多接口来设计部件软件的详细信息请参阅“部件设计的一般准则”的“通过接口的实现提供多态性”。“维护二进制兼容性”介绍了 Visual Basic 用来防止兼容性问题的版本系统。