C# 名稱空間(Namespace)
阿新 • • 發佈:2022-04-12
名稱空間的設計目的是提供一種讓一組名稱與其他名稱分隔開的方式。在一個名稱空間中宣告的類的名稱與另一個名稱空間中宣告的相同的類的名稱不衝突。
我們舉一個計算機系統中的例子,一個資料夾(目錄)中可以包含多個資料夾,每個資料夾中不能有相同的檔名,但不同資料夾中的檔案可以重名。
定義名稱空間
名稱空間的定義是以關鍵字 namespace 開始,後跟名稱空間的名稱,如下所示:
namespace namespace_name { // 程式碼宣告 }
為了呼叫支援名稱空間版本的函式或變數,會把名稱空間的名稱置於前面,如下所示:
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(); } }
當上面的程式碼被編譯和執行時,它會產生下列結果:
Inside first_space Inside second_space
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(); } }
當上面的程式碼被編譯和執行時,它會產生下列結果:
Inside first_space Inside second_space
巢狀名稱空間
名稱空間可以被巢狀,即您可以在一個名稱空間內定義另一個名稱空間,如下所示:
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"); } } } }
當上面的程式碼被編譯和執行時,它會產生下列結果:
In SomeNameSpace In Nested