C# 名称空间如何在运行时加载类

C# 名称空间如何在运行时加载类,c#,C#,当程序中使用了大量名称空间时,运行时会发生什么情况?是完全加载了名称空间中的类,还是加载了程序中使用的类?如果程序中存在未使用的名称空间怎么办?名称空间实际上更像是编译时构造,而不是运行时构造。将类放入命名空间主要只影响类的名称。任何类的“完全限定名”实际上是其命名空间层次结构(由句点分隔),后跟实际的类名。如果不能在运行时“加载”名称空间,则整个概念不存在 编译程序时,如果将其编译为库(.dll),则可以添加对该.dll的引用,在这种情况下,该dll中的所有类在程序中都是“accessibe”

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

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

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


当您将
using
语句添加到命名空间的文件顶部时,它不会“加载”该命名空间。编译器将使用它将所有“非限定”类名解析为“完全限定”类名(在编译时)。如果您首先使用的是完全限定的类名,那么您就不需要使用s进行任何
(但这确实会使您的代码变得混乱,因此您应该添加它们)。

您可以
使用
任意多的名称空间。名称空间不加载类。将名称空间视为一种方便的功能,有点像
path
变量。如果不使用名称空间,您将编写如下代码:

System.Collections.Generic.List<string> myList = 
    new System.Collections.Generic.List<string>();
以下2个链接可能有助于扩展您对名称空间的理解:

底线:
名称空间
帮助组织和控制项目中类的可见性范围

HTH…

名称空间不加载类。名称空间组织类名。
using System.Collections.Generic;

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