Module 语句

更新:2007 年 11 月

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

[ <attributelist> ] [ accessmodifier ]  Module name
    [ statements ]
End Module

各部分说明

备注

Module 语句定义了在其整个命名空间中都可用的引用类型。“模块”(有时称为“标准模块”)类似于类,但有一些重要的差别。每个模块均正好有一个实例,并且无需创建此实例或将其赋给变量。模块不支持继承,也不实现接口。请注意,从类或结构是类型这一意义上说,模块并非类型 - 您无法将编程元素声明为具有模块的数据类型。

仅可以在命名空间级别使用 Module。这意味着模块的声明上下文必须是源文件或命名空间,而不能是类、结构、模块、接口、过程或块。无法在一个模块或任何类型中嵌套另一个模块。有关更多信息,请参见 声明上下文和默认访问级别

模块具有与程序相同的生存期。由于它的成员全都为 Shared,因此,它们也都具有与程序相同的生存期。

模块默认为 Friend (Visual Basic) 访问级别。可以使用访问修饰符来调整它们的访问级别。有关更多信息,请参见 Visual Basic 中的访问级别

模块的所有成员均隐式地为 Shared。

类和模块

这两个元素具有许多相似的地方,但也存在一些重要的差别。

  • **术语。**以前版本的 Visual Basic 识别两种类型的模块:类模块(.cls 文件)和标准模块(.bas 文件)。当前版本会分别调用这些类和模块。

  • **共享成员。**可以控制类的成员是共享成员还是实例成员。

  • **面向对象。**类是面向对象的,但模块不是。因此,只能将类实例化为对象。有关更多信息,请参见 类与模块

规则

  • **修饰符。**所有模块成员均隐式地为 Shared (Visual Basic)。在声明成员时,无法使用 Shared 关键字,而且无法更改任何成员的共享状态。

  • **继承。**模块无法从除 Object(所有模块均从它继承)外的任何类型继承。特别地,一个模块无法从另一个模块继承。

    无法在模块定义中使用 Inherits 语句,即使是指定 Object 亦为如此。

  • **默认属性。**无法在模块中定义任何 默认属性

行为

  • **访问级别。**在模块中,可以利用成员自己的访问级别来声明每个成员。模块成员默认为 Public (Visual Basic) 访问级别,但变量和常数除外,它们默认为 Private (Visual Basic) 访问级别。如果模块的访问级别在限制性上高于其一个成员的访问级别,则指定的模块访问级别将具有优先权。

  • **范围。**模块的范围贯穿其命名空间。

    每个模块成员的范围是整个模块。请注意,所有成员都会经受类型提升,这将使它们的范围提升到包含模块的命名空间。有关更多信息,请参见 类型提升

  • **限定。**可以在一个项目中具有多个模块,而且可以在两个或更多个模块中声明名称相同的成员。但是,如果从模块外引用此类成员,则必须用适当的模块名称来限定此类成员。有关更多信息,请参见 有多个同名变量时解析引用

示例

Public Module thisModule
    Sub Main()
        Dim userName As String = InputBox("What is your name?")
        MsgBox("User name is" & userName)
    End Sub
    ' Insert variable, property, procedure, and event declarations.
End Module

请参见

概念

类型提升

参考

Class 语句 (Visual Basic)

Namespace 语句

Structure 语句

Interface 语句 (Visual Basic)

Property 语句