C# 命名空間 Namespace
c# 命名空間 namespace
命名空間的設計目的是提供一種讓一組名稱與其他名稱分隔開的方式。在一個命名空間中聲明的類的名稱與另一個命名空間中聲明的相同的類的名稱不沖突。
我們舉一個計算機系統(tǒng)中的例子,一個文件夾(目錄)中可以包含多個文件夾,每個文件夾中不能有相同的文件名,但不同文件夾中的文件可以重名。
1. 定義命名空間
命名空間的定義是以關鍵字 namespace 開始,后跟命名空間的名稱,如下所示:
namespace namespace_name { ? ?// 代碼聲明 }
為了調用支持命名空間版本的函數(shù)或變量,會把命名空間的名稱置于前面,如下所示:
namespace_name.item_name;
下面的程序演示了命名空間的用法:
using system; namespace first_space { ? ?class namespace_cl ? ?{ ? ? ? public void func() ? ? ? { ? ? ? ? ?console.writeline("inside first_space"); ? ? ? } ? ?} } namespace second_space { ? ?class namespace_cl ? ?{ ? ? ? public void func() ? ? ? { ? ? ? ? ?console.writeline("inside second_space"); ? ? ? } ? ?} } ? class testclass { ? ?static void main(string[] args) ? ?{ ? ? ? first_space.namespace_cl fc = new first_space.namespace_cl(); ? ? ? second_space.namespace_cl sc = new second_space.namespace_cl(); ? ? ? fc.func(); ? ? ? sc.func(); ? ? ? console.readkey(); ? ?} }
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結果:
inside first_space inside second_space
2. using 關鍵字
using 關鍵字表明程序使用的是給定命名空間中的名稱。例如,我們在程序中使用 system 命名空間,其中定義了類 console。我們可以只寫:
console.writeline ("hello there");
我們可以寫完全限定名稱,如下:
system.console.writeline("hello there");
您也可以使用 using 命名空間指令,這樣在使用的時候就不用在前面加上命名空間名稱。該指令告訴編譯器隨后的代碼使用了指定命名空間中的名稱。下面的代碼演示了命名空間的應用。
讓我們使用 using 指定重寫上面的范例:
using system; using first_space; using second_space; namespace first_space { ? ?class abc ? ?{ ? ? ? public void func() ? ? ? { ? ? ? ? ?console.writeline("inside first_space"); ? ? ? } ? ?} } namespace second_space { ? ?class efg ? ?{ ? ? ? public void func() ? ? ? { ? ? ? ? ?console.writeline("inside second_space"); ? ? ? } ? ?} } ? class testclass { ? ?static void main(string[] args) ? ?{ ? ? ? abc fc = new abc(); ? ? ? efg sc = new efg(); ? ? ? fc.func(); ? ? ? sc.func(); ? ? ? console.readkey(); ? ?} }
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結果:
inside first_space inside second_space
3. 嵌套命名空間
命名空間可以被嵌套,即您可以在一個命名空間內定義另一個命名空間,如下所示:
namespace namespace_name1 { // 代碼聲明 namespace namespace_name2 { // 代碼聲明 } }
您可以使用點(.)運算符訪問嵌套的命名空間的成員,如下所示:
using system; using somenamespace; using somenamespace.nested; namespace somenamespace { ? ? public class myclass ? ? { ? ? ? ? static void main() ? ? ? ? { ? ? ? ? ? ? console.writeline("in somenamespace"); ? ? ? ? ? ? nested.nestednamespaceclass.sayhello(); ? ? ? ? } ? ? } ? ? // 內嵌命名空間 ? ? namespace nested ? ? ? { ? ? ? ? public class nestednamespaceclass ? ? ? ? { ? ? ? ? ? ? public static void sayhello() ? ? ? ? ? ? { ? ? ? ? ? ? ? ? console.writeline("in nested"); ? ? ? ? ? ? } ? ? ? ? } ? ? } }
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結果:
in somenamespace in nested