何时需要使用版本的兼容性

增强软件部件时,Visual Basic 提供了两种保持向后兼容的机制— 即“版本兼容”特性和 Implements 特性。

版本兼容性

对于用早期版本编译的程序,Visual Basic 的“版本兼容”特性可以在保持向后兼容的同时增强部件。“属性”对话框“部件”选项卡的“版本兼容”包含三个选项:

下面介绍如何适当使用这些选项。

使用 Implements 语句实现兼容性

Implements 语句允许向类模块中增加多个接口,这在《Visual Basic 程序员指南》的“部件设计的一般准则”里的“多态性、接口、类型库和 GUID”和“通过接口的实现提供多态性”,以及“用对象编程”的“多态性”中介绍。

多接口可以使系统不断进化,无需破坏已有部件或进行大量的重新编译,因为已释放的接口永远不会改变。另一方面,可以通过创建新接口向系统增加新的功能。

这种方法非常接近部件对象模块 (COM) 的设计思想,而 ActiveX 规范正是基于部件对象模块的。

注意 “版本兼容”的“二进制兼容性”选项与 Implements 和多接口一起使用时是很有用的,可以防止对类的缺省接口的修改。

什么时候使用“版本兼容”选项

如果决定使用“版本兼容”特性,下面这些规则对于决定何时使用不同的选项会有所帮助:

使用“不兼容”终止兼容性

如果是在已有部件的新版本上开始工作,那么进行增强的唯一办法就是打破向后兼容性。此时,在第一次编译工程时设置“不兼容”。这可以保证在开始时标识符清单是空白的,而已有的程序不会错误地试图使用不兼容的版本。

在编译不具有兼容性的现有工程之前,还要

在“二进制版本兼容性的级别”中详细讨论了这些项目。

用“不兼容”进行编译后,切换到“工程兼容”简化开发任务。

在进行新的开发时使用“工程兼容”

开发部件的第一个版本时应使用“工程兼容”。“工程兼容”保留类型库标识符,这样就不需要经常设置测试工程对部件工程的引用了。

使用“工程兼容”还可以使测试时在部件工程和已编译部件之间切换更加容易。

“工程兼容”在“工程兼容性:避免引用丢失”中讨论。

对已有部件的新版本使用二进制兼容性

如果希望用早期版本编译的应用程序能够在新版本下工作,那么在开发任何部件的第二个版本时应该切换到“二进制兼容”。

切换到“二进制兼容”在相关主题“为兼容性提供参考点”中讨论。

不要混用二进制兼容性和多接口

如果使用多接口和 Implements 语句来提供向后兼容性,不要使用“二进制兼容”修改已定义为使用 Implemens 的抽象接口。

要增强部件的任何一个接口,Visual Basic 会修改接口的 ID。通过增加接口来改进软件的技术依赖于接口不变性。就是说接口一旦定义就永不修改— 包括接口 ID。

详细信息 关于使用多接口来设计部件软件的详细信息请参阅“部件设计的一般准则”的“通过接口的实现提供多态性”。“维护二进制兼容性”介绍了 Visual Basic 用来防止兼容性问题的版本系统。