C# namespace

    所谓名称空间,是指一个名称能唯一确定一个个体的空间,即不存在多个个体有同一个名称,但并不规定同一个体不能有多个名称。


1. 对于一个 project

    可以简单的理解为,同一个 project 下所有文件中的代码位于同一个全局名称空间。在使用已定义的一个名称(已定义的类、方法、对象等等)时,需要先确定这个名称指代的实体,按照以下顺序搜索

    当前名称空间内部->当前 using 空间内部(当前名称空间 using 的所有名称空间内部)->上层名称空间内部->上层 using 空间内部->...->全局名称空间内部->全局 using 空间内部

并使用最先搜索到的结果。


    对于由句点连接的多个简单名称构成的复合名称,首先对最左的简单名称进行搜索。在确定其指代的实体后,在该实体范围内搜索剩余名称指代的实体。


    在搜索同一层的多个 using 空间时,若出现重名,则报错 ambiguous reference。


    在 using 空间内搜索时,不进入该 using 空间 using 的空间。


    搜索名称空间的名称时,搜索顺序不包含 using 空间。


    名称空间可以是分离的,可以在一个文件的不同部分,也可以在同一项目下不同文件(前面说了不同文件中的代码位于同一个全局名称空间)中。


    虽然可以简单的认为同一项目下不同文件相当于同一个文件,但存在特例:using 的作用范围只能覆盖当前文件,不能跨文件。


2. 对于多个 project

    在一个 project 中添加对其他 project 的引用后(包括System这种标准项目,或自己写的项目,编译类型选择dll和exe都可以),可以简单的理解为被引用的 project 的所有代码被添加到了当前 project 的全局名称空间。


    跨项目的多个文件使用同一个名称空间时,跨项目调用 class 依旧需要 class 是 public。


    在不同项目中使用的同一个名称空间中存在冲突的名称时,只有Warning没有error,本项目中的名称覆盖其他项目中的名称。。同一个项目中使用的同一个名称空间中存在冲突的名称时就会有error。




    C语言中没有名称空间的概念,实际上存在一个唯一的全局名称空间,所有源代码文件也可以认为实际上构成了同一个文件。之所以要添加头文件,是因为C语言先声明再使用的规定,而并非是为了使空间发生关系。(强行瞎猜!)


你可能感兴趣的:(C# namespace)