Visual C 命名空間詳解

2021-06-18 10:50:33 字數 1879 閱讀 1955

命名空間提供了一種組織相關類和其他型別的方式。與檔案或元件不同,命名空間是一種邏輯組合,而不是物理組合。在c#檔案中定義類時,可以把它包括在命名空間定義中。以後,在定義另乙個類,在另乙個檔案中執行相關操作時,就可以在同乙個命名空間中包含它,建立乙個邏輯組合,告訴使用類的其他開發人員這兩個類是如何相關的以及如何使用它們:

也可以在命名空間中巢狀其他命名空間,為型別建立層次結構:

namespace wrox}}

} 每個命名空間名都由它所在命名空間的名稱組成,這些名稱用句點分隔開,首先是最外層的命名空間,最後是它自己的短名。所以professionalcsharp命名空間的全名是wrox.procsharp,namespaceexample類的全名是wrox.procsharp.basics.namespaceexample。

使用這個語法也可以組織自己的命名空間定義中的命名空間,所以上面的**也可以寫為:

namespace wrox.procsharp.basics}

注意不允許在另乙個巢狀的命名空間中宣告多部分的命名空間。

命名空間與程式集無關。同乙個程式集中可以有不同的命名空間,也可以在不同的程式集中定義同乙個命名空間中的型別。

using語句

顯然,命名空間相當長,鍵入起來很繁瑣,用這種方式指定某個特定的類也是不必要的。如本章開頭所述,c#允許簡寫類的全名。為此,要在檔案的頂部列出類的命名空間,前面加上using關鍵字。在檔案的其他地方,就可以使用其型別名稱來引用命名空間中的型別了:

using system;

using wrox.procsharp;

如前所述,所有的c#源**都以語句using system;開頭,這僅是因為microsoft提供的許多有用的類都包含在system命名空間中。

如果using指令引用的兩個命名空間包含同名的類,就必須使用完整的名稱(或者至少較長的名稱),確保編譯器知道訪問哪個型別,例如,類namespaceexample同時存在於wrox.procsharp.basics和wrox.procsharp.oop命名空間中,如果要在命名空間wrox.procsharp中建立乙個類test,並在該類中例項化乙個namespaceexample類,就需要指定使用哪個類:

using wrox.procsharp;

class test}

因為using語句在c#檔案的開頭,c和c++也把#include放在這裡,所以從c++遷移到c#的程式設計師常把命名空間與c++風格的標頭檔案相混淆。不要犯這種錯誤,using語句在這些檔案之間並沒有真正建立物理鏈結。c#也沒有對應於c++標頭檔案的部分。

公司應花一定的時間開發一種命名空間模式,這樣其開發人員才能快速定位他們所需要的功能,而且公司內部使用的類名也不會與外部的類庫相衝突。本章後面將介紹建立命名空間模式的規則和其他命名約定。

命名空間的別名

using關鍵字的另乙個用途是給類和命名空間指定別名。如果命名空間的名稱非常長,又要在**中使用多次,但不希望該命名空間的名稱包含在using指令中(例如,避免類名衝突),就可以給該命名空間指定乙個別名,其語法如下:

using alias = namespacename;

下面的例子(前面例子的修訂版本)給wrox.procsharp.basics命名空間指定別名introduction,並使用這個別名例項化了乙個namespaceexample物件,這個物件是在該命名空間中定義的。它有乙個方法getnamespace(),該方法呼叫每個類都有的gettype()方法,以訪問表示類的型別的type物件。下面使用這個物件來返回類的命名空間名:

using system;

using introduction = wrox.procsharp.basics;

class test

}namespace wrox.procsharp.basics}}

命名空間詳解

1 一種定義作用域機制,即命名空間。用於放置傳統上c和c 全域性宣告的東西。這種作用域可以命名,訪問命名空間的成員採用訪問類成員的傳統記法 namespace name mumber name。事實上,類作用域可以看做名字空間的特殊情況。2 一種名字空間名定義區域性同義詞的機制。3 一種允許不顯示寫...

xml命名空間詳解

在研究spring security的時候,裡面提到了乙個重要的感念就是命名空間,當時以為是spring的乙個什麼特殊功能,後來研究後才發現是xml的乙個知識點,順便又研究了一下這個知識,找到一篇文章感覺挺好,在此做個記錄。關於命名空間有很多人迴避。認為太難。其實命名空間使用很普遍,在xml中也大量...

php 命名空間詳解

test1.php 的內容如下 class test test2.php 的內容如下 class test index.php 的內容如下 php提示我們不能宣告 test2.php 的 test類 這是為什麼呢 其實是因為 test2.php 中的 test類 和 test1.php 中的類重名了...