声明命名空间的名称,并导致声明后面的源代码在该命名空间中编译。
语法
Namespace [Global.] { name | name.name }
[ componenttypes ]
End Namespace
部件
全局可选。 允许从项目的根命名空间中定义命名空间。 请参阅 Visual Basic 中的命名空间。
name
必填。 标识命名空间的唯一名称。 必须是有效的 Visual Basic 标识符。 有关详细信息,请参阅 声明的元素名称。
componenttypes
可选。 构成命名空间的元素。 这些内容包括但不限于枚举、结构、接口、类、模块、委托和其他命名空间。
End Namespace
终止块 Namespace
。
注解
命名空间用作组织系统。 它们提供了一种分类和呈现向其他程序和应用程序公开的编程元素的方法。 请注意,命名空间不是类或结构的类型,不能声明编程元素具有命名空间的数据类型。
在语句属于该命名空间之后 Namespace
声明的所有编程元素。 Visual Basic 继续将元素编译到最后一个声明的命名空间中,直到遇到 End Namespace
语句或其他 Namespace
语句。
如果已定义命名空间,即使在项目外部,也可以向其添加编程元素。 为此,请使用 Namespace
语句指示 Visual Basic 将元素编译到该命名空间中。
只能在文件或命名空间级别使用 Namespace
语句。 这意味着命名空间的 声明上下文 必须是源文件或其他命名空间,不能是类、结构、模块、接口或过程。 有关详细信息,请参阅 声明上下文和默认访问级别。
可以在另一个命名空间中声明一个命名空间。 可以声明的嵌套级别没有严格的限制,但请记住,当其他代码访问最内部命名空间中声明的元素时,它必须使用包含嵌套层次结构中所有命名空间名称的限定字符串。
访问级别
命名空间被视为具有 Public
访问级别。 可以从同一项目中任意位置的代码、引用项目的其他项目以及从项目生成的任何程序集访问命名空间。
在命名空间级别声明的编程元素(表示命名空间中,但不在任何其他元素内)可以具有 Public
或 Friend
访问。 如果未指定,则默认使用 Friend
此类元素的访问级别。 可以在命名空间级别声明的元素包括类、结构、模块、接口、枚举和委托。 有关详细信息,请参阅 声明上下文和默认访问级别。
根命名空间
项目中的所有命名空间名称都基于 根命名空间。 Visual Studio 将项目名称指定为项目中所有代码的默认根命名空间。 例如,如果项目命名 Payroll
,则其编程元素属于命名空间 Payroll
。 如果声明 Namespace funding
,该命名空间的全名为 Payroll.funding
。
如果要在语句中 Namespace
指定现有命名空间,例如在泛型列表类示例中,可以将根命名空间设置为 null 值。 为此,请单击“项目”菜单中的“项目属性”,然后清除根命名空间条目,使框为空。 如果未在泛型列表类示例中执行此作,则 Visual Basic 编译器将作为
或者,可以使用 Global
关键字来引用项目外部定义的命名空间的元素。 这样,便可以将项目名称保留为根命名空间。 这减少了无意中将编程元素与现有命名空间合并的机会。 有关详细信息,请参阅 Visual Basic 命名空间中的“完全限定名称中的全局关键字”部分。
关键字 Global
也可以在 Namespace 语句中使用。 这样,便可以从项目的根命名空间中定义命名空间。 有关详细信息,请参阅 Visual Basic 中命名空间中的“Namespace 语句中的全局关键字”部分。
Troubleshooting. 根命名空间可能会导致命名空间名称意外串联。 如果引用项目外部定义的命名空间,Visual Basic 编译器可以将它们解释为根命名空间中的嵌套命名空间。 在这种情况下,编译器无法识别已在外部命名空间中定义的任何类型。 若要避免这种情况,请将根命名空间设置为 null 值,如“根命名空间”中所述,或使用 Global
关键字访问外部命名空间的元素。
属性和修饰符
不能将属性应用于命名空间。 属性为程序集的元数据提供信息,这对源分类器(如命名空间)没有意义。
不能将任何访问或过程修饰符或任何其他修饰符应用于命名空间。 由于不是类型,因此这些修饰符没有意义。
示例 1
以下示例声明两个命名空间,一个嵌套在另一个命名空间中。
Namespace n1
Namespace n2
Class a
' Insert class definition.
End Class
End Namespace
End Namespace
示例 2
以下示例在一行中声明多个嵌套命名空间,它等效于上一个示例。
Namespace n1.n2
Class a
' Insert class definition.
End Class
End Namespace
示例 3
以下示例访问在前面的示例中定义的类。
Dim instance As New n1.n2.a
示例 4
以下示例定义新的泛型列表类的框架并将其添加到 System.Collections.Generic 命名空间。
Namespace System.Collections.Generic
Class specialSortedList(Of T)
Inherits List(Of T)
' Insert code to define the special generic list class.
End Class
End Namespace