当程序中使用多个名称空间时,运行时会发生什么情况?名称空间中的类是完全加载的还是程序中使用的类被加载的?如果程序中存在未使用的命名空间怎么办?
最佳答案
名称空间实际上更多的是编译时构造,而不是运行时构造。将类放入命名空间主要只影响类的名称。任何类的“完全限定名”实际上是其名称空间层次结构(由句点.
分隔),后跟实际类名。在运行时,你不能“加载”命名空间,整个概念不存在。
编译程序时,如果将其编译到库(.dll),则可以添加对该.dll的引用,在这种情况下,该dll中的所有类都是程序中的“accessibe”。至于它们是否会被加载,它们当然有可能被加载,但可能是由于延迟初始化,未使用的类不会对性能产生显著影响。
当您将using
语句添加到命名空间的文件顶部时,它不会“加载”该命名空间。编译器将使用它将所有“非限定”类名解析为“完全限定”类名(在编译时)。如果一开始只使用完全限定的类名,则不需要任何using
s(但这会使代码变得混乱,因此无论如何都应该添加它们)。