解读.Net中的命名空间和程序集

对于初学者有些概念是经常会被混淆的,下面的问题就非常有代表性 
出处
问题
请教:
各位大哥,C#和 ASP.NET 中的命名空间 是什么意思啊?
相当于 C 或 C++ 或 DELPHI  中的什么东西呢?
命名空间有什么用啊?
谢谢
在这里我只解释一下.Net中的命名空间,以及和程序集的关系.C里没有这概念, C++的命名空间原则和作用与在C#中是基本一致的,Delphi,呵呵,没摸过:),好,进入正题吧
命名空间允许我们对相关的类型进行逻辑上的组织,这使得我们很方便的地定位一个类型.
举个简单的例子,我们实例化的一个列队
如果不引入命名空间,则要这样写
System.Collections.Queue q=new System.Collections.Queue();
那引入命名空间呢? 则只要这样写
Using System.Collections;//引入
Queue q=new Queue();
对于编辑来说,命名空间仅仅是在类型名称前加了一些由点号隔开的符号而已.这使得一个类型的名称更长,从而也更具惟一性.如果两个相同的类在同一个命名空间则会冲突,如果不同的命名空间有相同的类型,也会产生二义性,就像windows中的目录一样,同一目录不能有同名文件,不同目录则可以.如果你非要用,可以用全称(System.Collections.Queue),也可以using sysQueue= System.Collections.Queue;
由于会遇到类型冲突的情况,所有在命名空间应该严格按命名规则,一般是公司.产品.
注意,C#的using指示符会指示编译器试着在类型名上添加不同的前缀,直到找到一个匹配为止
刚才已经讲了,命名空间只是逻辑上,真正的类型在程序集里,当查找一个类型的定义时,编译器必须被告知到哪些程序集中进行查找,编译器将扫描它知道的所有程序集来查找类型的定义.一旦编译器找到了正确的程序,程序集信息和类型信息会被添加到生成托管模块的元数据中,C#编译器默认情况下会自动在MSCorLib.dll程序集中进行查找.而MSCorLib.dll包含了所有FCL中定义的核心类型.例如Object,String等
下面举些例子,来说明怎么创建命名空间
Namespace CompnyName {         //CompanyName
              Class A {                // CompanyName.A
                     Class B { …}        // CompanyName.A.B
        }
Namespace Office                  //CompanyName.Office
       Class C { … }        //CompanyName.Office.C
}
}
在C#中,命名空间隐含为公有,而且我们不能用任何访问修饰符来修改它.
最后讲讲,命名空间和程序集的关系
其实他们两者并非一定相关,特别的,多个属于同一命名空间的类型可能被实现在多个程序集中.例如,System.IO.FileStream类型在MSCorLib.dll程序集中,而System.IO.FileSystemWatcher类型被实现在System.dll程序集中,而实际上,根本没有System.Collections.dll程序集
在一般的情况下,是一个程序集包含多个命名空间
比如上面的命名空间生成为NST程序集中,怎么生产?
工程项目à属性页à通用属性à常规, 这里有程序集名称(NST),输出类型(选类库).
那么我要引用类型C怎么办? 看下面
先在项目的引用里添加NST.dll,然而
Using CompanyName.Office; //编译器会自动找程序集,实际上找到了Nst.dll程序集
C myc=new C();//myc就是C的实例了
其他的您就可以举一反三了.
原文地址:https://www.cnblogs.com/supercode/p/175727.html