Class 语句 (Visual Basic)

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

语法

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _  
Class name [ ( Of typelist ) ]  
    [ Inherits classname ]  
    [ Implements interfacenames ]  
    [ statements ]  
End Class  

组成部分

术语 定义
attributelist 可选。 请参阅特性列表
accessmodifier 可选。 可以是以下值之一:

- Public
- Protected
- Friend
- 专用
- Protected Friend
- Private Protected

请参阅 Access levels in Visual Basic
Shadows 可选。 请参阅 Shadows
MustInherit 可选。 请参阅 MustInherit
NotInheritable 可选。 请参阅 NotInheritable
Partial 可选。 指示类的部分定义。 请参阅 Partial
name 必需。 此类的名称。 请参阅 Declared Element Names
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 中的访问级别

规则

  • 嵌套。 可以在一个类中定义另一个类。 外部类称为“包含类”,内部类称为“嵌套类”。

  • 继承。 如果类使用 Inherits 语句,则只能指定一个基类或接口。 类不能从多个元素继承。

    一个类不能从其他具有更强限制性访问级别的类继承。 例如,Public 类不能从 Friend 类继承。

    一个类不能从嵌套在其中的另一个类继承。

  • 实现。 如果类使用 Implements 语句,必须实现你在 interfacenames 中指定的每个接口定义的每个成员。 这种情况的一个例外是基类成员的重新实现。 有关详细信息,请参阅实现中的“重新实现”。

  • 默认属性。 一个类最多只能指定一个属性作为其默认属性。 有关详细信息,请参阅默认

行为

  • 访问级别。 在一个类中,你可以为每个成员声明其自己的访问级别。 类成员默认为 Public 访问,变量和常量除外,它们默认为 Private 访问。 当类的访问级别高于其成员之一时,以类访问级别为准。

  • 作用域。 类的作用域是其整个包含命名空间、类、结构或模块。

    每个类成员的作用域都是整个类。

    生存期。 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

另请参阅