Module 语句

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

语法

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

组成部分

attributelist
可选。 请参阅特性列表

accessmodifier
可选。 可以是以下值之一:

请参阅 Access levels in Visual Basic

name
必需。 此模块的名称。 请参阅 Declared Element Names

statements
可选。 用于定义此模块的变量、属性、事件、过程和嵌套类型的语句。

End Module
终止 Module 定义。

注解

Module 语句定义了在其命名空间中可用的引用类型。 模块(有时称为标准模块)类似于类,但有一些重要区别。 每个模块只有一个实例,不需要创建或分配给变量。 模块不支持继承或实现接口。 请注意,模块不是类或结构那样的类型,你不能将编程元素声明为具有模块的数据类型。

只能在命名空间级别使用 Module。 这意味着模块的声明上下文必须是源文件或命名空间,并且不能是类、结构、模块、接口、过程或块。 不能将一个模块嵌套在另一个模块中,也不能嵌套在任何类型中。 有关详细信息,请参阅声明上下文和默认访问级别

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

模块默认为 Friend 访问。 可以使用访问修饰符调整其访问级别。 有关详细信息,请参阅 Visual Basic 中的访问级别

模块的所有成员都是隐式 Shared 的。

类和模块

这些元素具有许多相似之处,但也存在一些重要的差异。

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

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

  • 面向对象。 类是面向对象的,但模块不是。 因此,只能将类实例化为对象。 有关详细信息,请参阅对象和类

规则

  • 修饰符。 所有模块成员都是隐式 Shared 的。 在声明成员时,不能使用 Shared 关键字,也不能更改任何成员的共享状态。

  • 继承。 模块不能从 Object 以外的任何类型继承,所有模块都从该类型继承。 特别是,一个模块不能从另一个模块继承。

    不能在模块定义中使用 Inherits 语句,甚至不能指定 Object

  • 默认属性。 不能在模块中定义任何默认属性。 有关详细信息,请参阅 Default

行为

  • 访问级别。 在一个模块中,你可以为每个成员声明其自己的访问级别。 模块成员默认为 Public 访问,变量和常量除外,它们默认为 Private 访问。 当一个模块的访问权限比它的一个成员更受限制时,指定的模块访问级别优先。

  • 作用域。 模块在其命名空间的作用域内。

    每个模块成员的作用域都是整个模块。 请注意,所有成员都进行类型提升,这会导致其作用域提升为包含模块的命名空间。 有关详细信息,请参阅类型提升

  • 限定。 一个项目中可以有多个模块,并且你可以在两个或更多模块中声明同名的成员。 但是,如果引用来自该模块外部,必须使用适当的模块名称限定对此类成员的任何引用。 有关详细信息,请参阅 References to Declared Elements

示例

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

另请参阅