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

时间:2012-11-05 15:12:50

标签: c#

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

2 个答案:

答案 0 :(得分:6)

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

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

当您在命名空间的文件顶部添加using语句时,它不会加载"那个命名空间编译器将使用它来解决所有"不合格的"类名称为"完全合格"类名(在编译时)。如果您首先使用完全限定的类名,那么您将不需要任何using(但真的会使您的代码混乱,所以无论如何都应该添加它们)。

答案 1 :(得分: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