本文內容轉自:http://www.cnblogs.com/hjtdlx/archive/2011/10/30/2229508.html
1.命名控件與程序集的區別。
命名空間用於對類型進行邏輯分組。程序集則是程序的物理分組,對應於一個dll或exe文件。
2.為什么要使用兩種方式分組?把邏輯分組作為物理分組不是更簡單嗎?
邏輯分組主要針對開發人員,而物理分組主要針對安裝和部署。
除此之外,以下情況也需要使用兩種方式分組,否則會很不方便。
1)團隊開發。一個公司分別由不同的部門共同開發同一個命名空間的不同組件。那么不同的部門可以把他們開發的東西編譯成各自的dll文件。使用時把幾個dll一起引用即可。
2)一個命名空間里包含的類型太多,而有大部分是用不上的。如果把一個命名空間編譯成一個dll,則會降低運行效率。
3)有時需要對一個命名空間內的類型區別對待。如果打算開發一個系列軟件,該軟件分普通版,專業版,高級版。越高的版本具有越高的權限(當中包含了一些高級的類),這時可以把高級的功能放到一個單獨的dll來控制。
3.類型可以沒有命名空間嗎?
可以
4.Object類的名字到底是Object還是System.Object?
可以說都是也可以說都不是。
1)對於IL來說,確定一個類型是需要程序集+類型全名稱的。比方調用Object的ToString()方法,其實是[MSCorLib.dll]System.Object::ToString()。因此CLR不知道命名空間的事情,它只知道調用MSCorLib.dll中的System.Object類。
2) 對於C#來說,編譯后會自動把命名空間加上點號讓類型名變成全名稱。但是,類名是不能出現點(.)符號的,以下代碼在邏輯上是成立的,但是C#語法不允許。



相當於






但是C#中命名空間是允許出現點符號的。






完全等同於








