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
    可选。指定这是一个泛型类。

  • typelist
    如果使用 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

请参见

任务

如何:使用泛型类

概念

结构和类

对象生存期:如何创建和销毁对象

Visual Basic 中的泛型类型

参考

Interface 语句 (Visual Basic)

Module 语句

Property 语句

其他资源

了解类