Class 语句 (Visual Basic)
更新:2007 年 11 月
声明类的名称,并引入构成该类的变量、属性、事件和过程的定义。
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
各部分说明
attributelist
可选。请参见属性列表。accessmodifier
可选。可以是如下内容之一:请参见 Visual Basic 中的访问级别。
Shadows
可选。请参见 Shadows。MustInherit
可选。请参见 MustInherit。NotInheritable
可选。请参见 NotInheritable。Partial
可选。指示该类的分部定义。请参见 分部 (Visual Basic)。name
必需。此类的名称。请参见 已声明元素的名称。Of
可选。指定这是一个泛型类。Inherits
可选。指示该类继承了另一个类的成员。请参见 Inherits 语句。classname
如果使用 Inherits 语句,则为必选项。派生此类的类的名称。Implements
可选。指示此类实现一个或多个接口的成员。请参见 Implements 语句。interfacenames
如果使用 Implements 语句,则为必选项。此类实现的接口的名称。statements
可选。定义此类的成员的语句。End Class
必需。终止 Class 定义。
备注
一条 Class 语句定义一个新数据类型。“类”是面向对象编程 (OOP) 的基本构造块。 有关更多信息,请参见 Visual Basic 中面向对象的编程 和 类:对象的蓝图。
您只能在命名空间或模块级别使用 Class。这意味着类的声明上下文必须是源文件、命名空间、类、结构、模块或接口,而且不能是过程或块。 有关更多信息,请参见 声明上下文和默认访问级别。
类的每个实例都拥有一个独立于所有其他实例的生存期。此生存期开始于 New (Visual Basic) 子句或函数(如 CreateObject 函数 (Visual Basic))创建实例时,结束于指向实例的所有变量都已设置为 Nothing (Visual Basic) 或其他类的实例时。
类默认为 Friend (Visual Basic) 访问。可以使用访问修饰符来调整它们的访问级别。有关更多信息,请参见 Visual Basic 中的访问级别。
规则
**嵌套。**可以在一个类中定义另一个类。外部类称为“包含类”,而内部类称为“嵌套类”。
**继承。**如果类使用 Inherits 语句,则只能指定一个基类或接口。一个类不能从多个元素中继承。
一个类不能从访问级别的限制性较强的另一个类中继承。例如,Public 类不能从 Friend 类继承。
类不能从嵌套在该类中的类继承。
**实现。**如果类使用 Implements 语句,则必须实现由 interfacenames 中指定的每个接口定义的每个成员。此情况的例外是基类成员的重新实现。有关更多信息,请参见 Implements (Visual Basic) 中的“重新实现”。
**默认属性。**一个类最多只能指定一个属性作为其默认属性。有关更多信息,请参见默认属性。
行为
**访问级别。**在类中,可以使用其自身的访问级别声明每个成员。类成员默认为 Public (Visual Basic) 访问,但变量和常数除外,它们默认为 Private (Visual Basic) 访问。当某个类比其成员之一具有限制性更强的访问时,类访问级别将优先。
**范围。**类的范围遍及包含它的命名空间、类、结构或模块。
每个类成员的范围是整个类。
**生存期。**Visual Basic 不支持静态类。模块提供了与静态类等效的功能。有关更多信息,请参见 Module 语句。
类成员根据其声明的方式和位置而具有不同的生存期。有关更多信息,请参见 Visual Basic 中的生存期。
**限定。**类外部的代码必须使用该类的名称限定成员的名称。
如果嵌套类内部的代码建立了对编程元素的非限定性引用,Visual Basic 将首先在该嵌套类中搜索该元素,然后在其包含类中搜索,一直向外直到最外层的包含元素。有关更多信息,请参见 有多个同名变量时解析引用。
类和模块
这些元素具有许多相似性,但是也存在一些重要的差异。
**术语。**以前版本的 Visual Basic 识别两种类型的模块:类模块(.cls 文件)和标准模块(.bas 文件)。 当前版本会分别调用这些类和模块。
**共享成员。**可以控制类的成员是共享成员还是实例成员。
**面向对象。**类是面向对象的,但模块不是。您可以创建类的一个或多个实例。有关更多信息,请参见 类与模块。
示例
下面的示例使用 Class 语句定义一个类和几个成员。
Class bankAccount
Shared interestRate As Decimal
Private accountNumber As String
Private accountBalance As Decimal
Public holdOnAccount As Boolean = False
Public ReadOnly Property balance() As Decimal
Get
Return accountBalance
End Get
End Property
Public Sub postInterest()
accountBalance = accountBalance * (1 + interestRate)
End Sub
Public Sub postDeposit(ByVal amountIn As Decimal)
accountBalance = accountBalance + amountIn
End Sub
Public Sub postWithdrawal(ByVal amountOut As Decimal)
accountBalance = accountBalance - amountOut
End Sub
End Class