Module 语句
更新:2007 年 11 月
声明模块的名称,并引入模块包含的变量、属性、事件和过程的定义。
[ <attributelist> ] [ accessmodifier ] Module name
[ statements ]
End Module
各部分说明
attributelist
可选。请参见属性列表。accessmodifier
可选。可以是如下内容之一:请参见 Visual Basic 中的访问级别。
name
必需。此模块的名称。请参见 已声明元素的名称。statements
可选。定义此模块的变量、属性、事件、过程和嵌套类型的语句。End Module
终止 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