命名空间如何在运行时加载类

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

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

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

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

您可以根据需要use任意数量的命名空间。 命名空间不加载类。 将名称空间视为一种便利function,有点像path变量。 如果你不使用命名空间,你最终会编写如下代码:

 System.Collections.Generic.List myList = new System.Collections.Generic.List(); 

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

 using System.Collections.Generic; // ..... further down in code: List myList = new List(); 

以下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 …