Namespace 语句
声明命名空间的名称,并导致在该命名空间中编译声明后面的源代码。
语法
Namespace [Global.] { name | name.name }
[ componenttypes ]
End Namespace
组成部分
Global 可选。 允许你定义项目根命名空间之外的命名空间。 请参阅 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 编译器会将 System.Collections.Generic
作为项目 Payroll
中的新命名空间,全名为 Payroll.System.Collections.Generic
。
或者,可以使用 Global
关键字来引用在项目外部定义的命名空间元素。 这样做可以将项目名称保留为根命名空间, 从而减少无意中将编程元素与现有命名空间的元素合并在一起的可能性。 有关详细信息,请参阅 Visual Basic 中的命名空间中的“完全限定名称中的 Global 关键字”部分。
Global
关键字还可用于 Namespace 语句。 这将允许你定义项目根命名空间之外的命名空间。 有关详细信息,请参阅 Visual Basic 中的命名空间中的“Namespace 语句中的 Global 关键字”部分。
故障排除。 根命名空间可能导致命名空间名称的意外串联。 如果引用在项目外部定义的命名空间,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