-
Namespace 语句
声明命名空间的名称,并使跟在声明后面的源代码将在该命名空间中进行编译。
Namespace { name | name.name }
[ componenttypes ]
End Namespace
部件
-
name
必选。 标识命名空间的唯一名称。 必须是有效的 Visual Basic 标识符。 有关更多信息,请参见 已声明的元素名称 (Visual Basic)。 -
componenttypes
可选。 组成命名空间的元素。 这些元素包括(但不限于)枚举、结构、接口、类、模块、委托和其他命名空间。 -
End Namespace
终止 Namespace 块。
备注
命名空间用作组织系统。 它们提供一种方法,用于对向其他程序和应用程序公开的编程元素进行分类和呈现。 请注意,从类或结构是类型这一意义上说,命名空间并非一个类型——您无法将一个编程元素声明为具有命名空间的数据类型。
只能在文件或命名空间级别使用 Namespace 语句。 这意味着命名空间的声明上下文必须是源文件或另一个命名空间,而不能是类、结构、模块、接口或过程。 有关更多信息,请参见声明上下文和默认访问级别 (Visual Basic)。
可将命名空间视为如同具有 Public 访问级别一样。 命名空间可从以下位置访问:同一项目中任何位置的代码、引用该项目的其他项目以及从该项目生成的任何程序集。
规则
-
**特性。**无法将特性应用于命名空间。 特性向程序集的元数据提供信息,这对于源分类器(如命名空间)并无意义。
-
**修饰符。**无法将任何访问或过程修饰符或任何其他修饰符应用于命名空间。 由于命名空间并非类型,因此这些修饰符对于它并无意义。
-
**嵌套。**可以在一个命名空间中声明另一个命名空间。 对于可以声明的嵌套级别并无严格的限制,但请记住,当其他代码访问在最内部的命名空间中声明的元素时,它必须使用一个包含嵌套层次结构中的所有命名空间名称的限定字符串。
行为
-
**访问级别。**在命名空间级别声明的编程元素(在命名空间中有意义,但在任何其他元素内部无意义)可以具有 Public 或 Friend 访问级别。 如果未指定此类元素的访问级别,则默认为 Friend。 可以在命名空间级别声明的元素包括类、结构、模块、接口、枚举和委托。 有关更多信息,请参见声明上下文和默认访问级别 (Visual Basic)。
-
**编译。**在 Namespace 语句后声明的所有编程元素均属于该命名空间。 Visual Basic 不断地将元素编译到最后一个声明的命名空间中,直到它遇到 End Namespace 语句或另一个 Namespace 语句。
-
**添加到命名空间。**如果已定义某个命名空间,则即使在项目之外,也可以向该命名空间添加编程元素。 为此,可使用 Namespace 语句指示 Visual Basic 将以下元素编译到该命名空间中。
下面的示例定义一个新的泛型列表类的主干,并将它添加到 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
-
**根命名空间。**项目中的所有命名空间名称均基于根命名空间。 Visual Studio 将您的项目名称指定为项目中所有代码的默认根命名空间。 例如,如果项目名为 Payroll,则它的编程元素均属于 Payroll 命名空间。 如果声明 Namespace funding,则该命名空间的全名为 Payroll.funding。
如果想在 Namespace 语句中指定现有的命名空间(如在泛型列表类示例中那样),则可以将根命名空间设置为空值。 为此,请在**“项目”菜单中单击“项目属性”,然后清除“根命名空间”**条目,使此框为空。 如果在泛型列表类示例中不这样做,Visual Basic 编译器会将 System.Collections.Generic 用作 Payroll 项目中的新命名空间,全名为 Payroll.System.Collections.Generic。
另外,也可以使用 Global 关键字来引用在项目外定义的命名空间的元素。 这样可使您将项目名称留用作根命名空间。 这会减少无意中将您的编程元素与现有命名空间的编程元素混在一起的机率。
疑难解答
- **未定义的类型。**根命名空间可能导致命名空间名称发生意外的串联。 如果引用在项目外定义的命名空间,Visual Basic 编译器可将它们解释为根命名空间中的嵌套命名空间。 在这种情况下,编译器无法识别已在外部命名空间中定义的任何类型。 为避免此问题,请将根命名空间设置为空值(如“根命名空间”中所述),或使用 Global 关键字来访问外部命名空间的元素。
示例
下面的示例声明两个命名空间,其中一个嵌套在另一个中。
Namespace n1
Namespace n2
Class a
' Insert class definition.
End Class
End Namespace
End Namespace
下面的示例在一行上声明多个嵌套命名空间,其效果与上一个示例等同。
Namespace n1.n2
Class a
' Insert class definition.
End Class
End Namespace
下面的示例访问在前面的示例中定义的类。
Dim instance As New n1.n2.a
原文链接:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/0dx91cw5(v=vs.100)