声明类的名称,并引入类包含的变量、属性、事件和过程的定义。
语法
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
部件
术语 | 定义 |
---|---|
attributelist |
可选。 请参阅 属性列表。 |
accessmodifier |
可选。 可以是以下值之一: - 公共 - 保护 - 朋友 - 私人 - 受保护的好友 - 专用保护 请参阅 Visual Basic 中的 Access 级别。 |
Shadows |
可选。 查看 阴影。 |
MustInherit |
可选。 请参阅 MustInherit。 |
NotInheritable |
可选。 请参阅 NotInheritable。 |
Partial |
可选。 指示类的部分定义。 请参阅 部分。 |
name |
必填。 此类的名称。 请参阅 声明的元素名称。 |
Of |
可选。 指定这是一个泛型类。 |
typelist |
如果使用 Of 关键字,则为必需。 此类的类型参数列表。 请参阅 类型列表。 |
Inherits |
可选。 指示此类继承另一个类的成员。 请参阅 Inherits 语句。 |
classname |
如果使用语句, Inherits 则为必需。 从中派生此类的类的名称。 |
Implements |
可选。 指示此类实现一个或多个接口的成员。 请参阅 Implements 语句。 |
interfacenames |
如果使用语句, Implements 则为必需。 此类实现的接口的名称。 |
statements |
可选。 定义此类成员的语句。 |
End Class |
必填。 终止 Class 定义。 |
注解
语句 Class
定义新的数据类型。
类是面向对象的编程(OOP)的基本构建基块。 有关详细信息,请参阅 对象和类。
只能在命名空间或模块级别使用 Class
。 这意味着类的 声明上下文 必须是源文件、命名空间、类、结构、模块或接口,不能是过程或块。 有关详细信息,请参阅 声明上下文和默认访问级别。
类的每个实例都有独立于所有其他实例的生存期。 此生存期从 New Operator 子句或函数(例如 CreateObject)创建时开始。 当指向实例的所有变量都设置为 Nothing 或指向其他类的实例时,它将结束。
类默认为 Friend 访问。 可以使用访问修饰符调整其访问级别。 有关详细信息,请参阅 Visual Basic 中的 Access 级别。
规则
嵌 套。 可以在另一个类中定义一个类。 外部类称为 包含类,内部类称为 嵌套类。
遗产。 如果类使用 Inherits 语句,则只能指定一个基类或接口。 类不能从多个元素继承。
类不能从具有更严格的访问级别的另一个类继承。 例如,类
Public
无法继承自Friend
类。类不能从嵌套在它的类继承。
实现。 如果类使用 Implements 语句,则必须实现由指定的每个
interfacenames
接口定义的每个成员。 例外情况是重新实现基类成员。 有关详细信息,请参阅 Implements 中的“重新实现”。默认属性。 类最多可以指定一个属性作为 其默认属性。 有关详细信息,请参阅 默认值。
行为
访问级别。 在类中,可以使用其自己的访问级别声明每个成员。 类成员默认为 公共 访问,但变量和常量除外,后者默认为 专用 访问。 当类具有比其中一个成员更多的受限访问时,类访问级别优先。
范围。 类在其包含命名空间、类、结构或模块的整个范围内。
每个类成员的范围是整个类。
一生。 Visual Basic 不支持静态类。 静态类的功能等效项由模块提供。 有关详细信息,请参阅 Module 语句。
类成员的生存期取决于它们的声明方式和位置。 有关详细信息,请参阅 Visual Basic 中的生命周期。
资格。 类外部的代码必须用该类的名称限定成员的名称。
如果嵌套类中的代码对编程元素进行非限定引用,则 Visual Basic 首先在嵌套类中搜索该元素,然后在其包含类中搜索该元素,依此类传到最外层的包含元素。
类和模块
这些元素有许多相似之处,但也存在一些重要的差异。
术语。 早期版本的 Visual Basic 可识别两种类型的模块: 类模块 (.cls 文件)和 标准模块 (.bas 文件)。 当前版本分别调用这些 类 和 模块。
共享成员。 可以控制类的成员是共享成员还是实例成员。
对象方向。 类面向对象,但模块不是。 可以创建类的一个或多个实例。 有关详细信息,请参阅 对象和类。
示例:
下面的示例使用一个 Class
语句来定义一个类和多个成员。
Class BankAccount
Shared interestRate As Decimal
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