4

当程序中使用多个命名空间时,运行时会发生什么?是完全加载了命名空间中的类还是加载了程序中使用的类?如果程序中存在未使用的命名空间怎么办?

4

2 回答 2

6

命名空间实际上更像是编译时构造,而不是运行时构造。将类放入命名空间主要只影响类的名称。任何类的“完全限定名”实际上是它的命名空间层次结构(由句点分隔.),后跟实际的类名。您不会在运行时“加载”名称空间,整个概念都不存在。

编译程序时,如果将其编译为库 (.dll),则可以添加对该 .dll 的引用,在这种情况下,该 dll 中的所有类在您的程序中都是“accessibe”。至于它们是否会被加载,它们当然有可能被加载,但是由于延迟初始化,未使用的类可能不会对性能产生重大影响。

当您将using语句添加到命名空间的文件顶部时,它不会“加载”该命名空间。编译器将使用它将所有“非限定”类名解析为“完全限定”类名(在编译时)。如果您一开始只使用完全限定的类名,则不需要任何usings (但这确实会使您的代码混乱,因此无论如何您都应该添加它们)。

于 2012-11-05T15:16:04.957 回答
1

您可以use使用任意数量的命名空间。命名空间不加载类。将命名空间视为一种便利功能,有点像path变量。如果你不使用命名空间,你最终会写出这样的代码:

System.Collections.Generic.List<string> myList = 
    new System.Collections.Generic.List<string>();

这会使代码编写在短时间内变得非常冗长和乏味。通过using命名空间,您可以将代码缩短为:

using System.Collections.Generic;

// ..... further down in code:
List<string> myList = new List<string>();

以下 2 个链接可能有助于扩展您对命名空间的理解:

http://msdn.microsoft.com/en-us/library/sf0df423%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/0d941h9d%28v=vs.80%29.aspx

底线:namespaces帮助组织和控制项目中类的可见性范围。

HTH...

于 2012-11-05T15:17:09.410 回答