命名空間與程序集的區別【轉】


本文內容轉自: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#語法不允許。

class  System.Object
{
}

    相當於

namespace  System
{
    
class Object
    
{
    }

}

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

namespace  System.IO
{
    
class Object
    
{
    }

}

   完全等同於

namespace  System
{
    
namespace IO
    
{
        
class Object
        
{
        }

    }

}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM