Class 语句 (Visual Basic)

声明类的名称,并引入类包含的变量、属性、事件和过程的定义。

语法

[ <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

另请参阅