类(针对 Visual Basic 6.0 用户)
更新:2007 年 11 月
类是面向对象的应用程序的构造块。类是表示系统中的对象的编程结构。设计应用程序需要设计所涉及的对象、这些对象所包含的信息以及这些对象可以执行的功能。有关类和面向对象编程的更多信息,请参见 Visual Basic 中面向对象的编程。
类模块
Visual Basic 6.0
Visual Basic 6.0 支持通过类模块定义类。类的定义存储在特殊文件类型(.cls 文件)中。每个类模块中定义一个类。类的某些定义嵌入在 .cls 文件中,并且只能通过项目系统进行编辑。
Visual Basic 2008
在 Visual Basic 2008 中,类由 Class 语句 (Visual Basic) 定义,而不是由文件名定义。Visual Basic 2008 中的类在源代码文件(.vb 文件)中定义。一个文件中可以定义多个类。整个类定义在源代码中以纯文本的形式显示。
全局类
Visual Basic 6.0
当在 Visual Basic 6.0 中创建新类时,Instancing 属性的允许值包括 GlobalSingleUse 和 GlobalMultiUse。这指示其他组件可调用新类的属性和方法,如同它们是共享成员一样。第一次调用类的其中一个成员时,会隐式创建类的实例。
Visual Basic 2008
Visual Basic 2008 不支持 Instancing 属性。Visual Basic 2008 通过允许公开标准模块成员提供相同的功能。可以使用 Imports 语句访问类的共享属性和方法。可通过 Public 类访问和适当的构造函数访问获得 GlobalMultiUse 的效果。
数据类
Visual Basic 6.0
Visual Basic 6.0 还支持数据源类和复杂数据使用者类。
Visual Basic 2008
在 Visual Basic 2008 中没有直接等效项。有关操作数据的类的信息,请参见如何:连接到对象中的数据。
默认成员
Visual Basic 6.0
在 Visual Basic 6.0 中,可以指定任何特定方法或数据成员是类的默认成员。
Visual Basic 2008
在 Visual Basic 2008 中,类或结构的默认成员只能是带有一个或多个参数的属性 (Property)。这就启用了与其他编程语言的互操作。有关更多信息,请参见如何:在 Visual Basic 中声明和调用默认属性。
对象生存期
Visual Basic 6.0
对象生存期由对象实例的创建时间和终止时间确定。程序确定它声明的对象的创建时间,但终止会涉及更复杂的机制。
在 Visual Basic 6.0 中,每个对象实例都维持一个引用计数。当释放实例的最后一个引用时,计数变为 0,对象被立即终止。
Visual Basic 2008
在 Visual Basic 2008 中,不必在释放最后一个引用后立即调用析构函数。这是由于公共语言运行库维护一个引用树,而非单个的引用计数。内存回收器在后台跟踪引用树。如果它从当前的任何执行代码中找到没有引用的对象或对象组,则会调用所有这类对象的析构函数。不可能预测该毁坏顺序或内存回收器跟踪引用树所花费的时间。因此,对象的生存期是不确定的。有关更多信息,请参见对象生存期:如何创建和销毁对象和垃圾回收。
升级选项
升级向导通过对代码进行极小程度的更改创建一个简单的类模块升级。除了上面列出的更改之外,Visual Basic 程序员还可以有多种专用于面向对象编程的新构造可供选择。下面列出了几种。
构造函数 构造函数取代了 Visual Basic 6.0 中使用的 Class_Initialize。有关更多信息,请参见 Class_Initialize 更改(针对 Visual Basic 6.0 用户)。
默认索引属性 默认索引属性在整个 .NET Framework 范围内被广泛用于访问集合项。有关更多信息,请参见 默认属性更改(针对 Visual Basic 6.0 用户)。
只读 在 Visual Basic 6.0 中,如果没有 Get 过程,则属性是隐式只读的。Visual Basic 2008 要求 ReadOnly 关键字显式声明此行为。有关更多信息,请参见Property 语句。
后期绑定 由于 Visual Basic 6.0 默认情况下提供后期绑定,因此要在升级代码时不出错最可行方法是将 Option Strict 设置为 Off。将 Option Strict 更改为 On 会在编译时强制类型安全,并可以在编译时而不是运行时公开细小的错误。有关更多信息,请参见Option Strict 语句。
方法重载 方法重载减少类的命名成员的数量。这使得类更具可读性并更容易针对类进行编程。有关更多信息,请参见过程更改(针对 Visual Basic 6.0 用户)。
文件名 Visual Basic 6.0 要求类名和文件名相匹配。在 Visual Basic 2008 中,程序员控制这两个名称并可以在一个源文件中定义多个类。在一个文件中包含多少个类通常取决于编码标准。
ByRef Visual Basic 6.0 中参数的默认值是 ByRef,因此最安全的升级是 ByRef。有关更多信息,请参见ByVal。
返回关键字 在 Visual Basic 6.0 中,函数名用作变量以返回函数值。Visual Basic 2008 提供显式 Return 关键字以返回函数值。有关更多信息,请参见 Return 语句 (Visual Basic)。
运算符重载 现在可以为所定义的类定义加 (+)、减 (-) 和其他运算符的含义。有关更多信息,请参见 Operator 语句。
新运算符 += 运算符可以缩短并简化代码行。有关更多信息,请参见算术运算符 (Visual Basic)。
新值的内联定义 Visual Basic 2008 中的语法允许在一行代码中声明和设置新变量的值。这意味着可以从已实例化对象时开始强制数据约束。有关更多信息,请参见 Dim 语句 (Visual Basic)。
重写代码是有风险的。只要更改了代码,就需要重新对其进行测试。此外,某些关键字在 Visual Basic 2008 中的行为与其在 Visual Basic 6.0 中的行为不完全一样。有关更多信息,请参见升级用 Visual Basic 早期版本创建的应用程序。
请参见
概念
Class_Initialize 更改(针对 Visual Basic 6.0 用户)