命名空間的設(shè)計(jì)目的是提供一種讓一組名稱與其他名稱分隔開的方式。在一個(gè)命名空間中聲明的類的名稱與另一個(gè)命名空間中聲明的相同的類的名稱不沖突。
我們舉一個(gè)計(jì)算機(jī)系統(tǒng)中的實(shí)例,一個(gè)文件夾(目錄)中可以包含多個(gè)文件夾,每個(gè)文件夾中不能有相同的文件名,但不同文件夾中的文件可以重名。
命名空間的定義是以關(guān)鍵字 namespace 開始,后跟命名空間的名稱,如下所示:
namespace namespace_name { // 代碼聲明 }
為了調(diào)用支持命名空間版本的函數(shù)或變量,會(huì)把命名空間的名稱置于前面,如下所示:
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(); } }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Inside first_space Inside second_space
using 關(guān)鍵字表明程序使用的是給定命名空間中的名稱。例如,我們?cè)诔绦蛑惺褂?System 命名空間,其中定義了類 Console。我們可以只寫:
Console.WriteLine ("Hello there");
我們可以寫完全限定名稱,如下:
System.Console.WriteLine("Hello there");
您也可以使用 using 命名空間指令,這樣在使用的時(shí)候就不用在前面加上命名空間名稱。該指令告訴編譯器隨后的代碼使用了指定命名空間中的名稱。下面的代碼演示了命名空間的應(yīng)用。
讓我們使用 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(); } }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Inside first_space Inside second_space
命名空間可以被嵌套,即您可以在一個(gè)命名空間內(nèi)定義另一個(gè)命名空間,如下所示:
namespace namespace_name1 { // 代碼聲明 namespace namespace_name2 { // 代碼聲明 } }
您可以使用點(diǎn)(.)運(yùn)算符訪問嵌套的命名空間的成員,如下所示:
using System; using SomeNameSpace; using SomeNameSpace.Nested; namespace SomeNameSpace { public class MyClass { static void Main() { Console.WriteLine("In SomeNameSpace"); Nested.NestedNameSpaceClass.SayHello(); } } // 內(nèi)嵌命名空間 namespace Nested { public class NestedNameSpaceClass { public static void SayHello() { Console.WriteLine("In Nested"); } } } }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
In SomeNameSpace In Nested