- 命名空间对相关的类型进行逻辑分组。
- C# using 指令指示编译器尝试为类型名称附加不同的前缀,直至找到匹配项。
- CLR 对命名空间一无所知。访问类型时,CLR需要知道类型的完整名称以及类型定义在哪个具体的程序集中。
- 编译器扫描引用的所有程序集,查找类型定义。如果找到,程序集信息和类型信息就嵌入生成的托管模块元数据中。
- MSCorLib.dll 程序集包含了所有核心 Framework 类库(FCL)的定义。(如 Object, Int32, String 等)
- 潜在问题:多个类型在不同命名空间重名。需要开发人员确保唯一性。
- C# using指令允许为类型或命名空间创建别名。
- C# 编译器提供外部别名(extern alias)功能。
-
CLR 编译器在类型定义元数据表中添加的实际类型名称。
-
命名空间和程序集不一定相关:同一命名空间的类型可能在不同程序集中;同一程序集也可能包含不同命名空间。
-
在MSDN中可以看到程序集以及命名空间
-
- using 指令的范围限制为包含它的文件。
- 创建 using 别名,以便更易于将标识符限定到命名空间或类型。 using 别名指令的右侧必须始终是一个完全限定类型,而与前面的 using 指令无关。
- 创建 using 指令,以便在命名空间中使用类型而不必指定命名空间。 using 指令不为您提供对嵌套在指定命名空间中的任何命名空间的访问。
using System.Text 并不能访问到System命名空间下的方法。