使用命名空間 (C# 程式設計手冊)
C# 程式大量使用命名空間有兩個原因。 第一,.NET Framework 類別會使用命名空間組織其多種類別。 第二,宣告您自己的命名空間,可以幫助您在較大型的程式設計專案中控制類別和方法名稱的範圍。
存取命名空間
大部分的 C# 應用程式以使用 using 指示詞的區段做為開頭。 這個區段會列出應用程式經常使用的命名空間,這樣一來,程式設計人員每次使用其中的方法時,就不需要再指定完整名稱。
例如,在程式的開頭加入這一行:
using System;
程式設計人員可以使用以下程式碼:
Console.WriteLine("Hello, World!");
取代以下程式碼:
System.Console.WriteLine("Hello, World!");
命名空間別名
using 指示詞 (C# 參考) 也可以用來建立命名空間的別名。 例如,如果要使用先前所撰寫的命名空間,且其中包含巢狀命名空間,您可能就要宣告別名,以快速參考特定命名空間,如下列範例所示:
using Co = Company.Proj.Nested; // define an alias to represent a namespace
使用命名空間控制範圍
namespace 關鍵字的用途在於宣告範圍。 能夠在專案中建立範圍,有助於您組織程式碼並建立全域唯一型別。 在下列範例中,SampleClass 的類別會分別在兩個命名空間中定義,其中一個命名空間以巢狀方式置於另一個中。 .運算子 (C# 參考) 可用來區分要呼叫哪一個方法。
namespace SampleNamespace
{
class SampleClass
{
public void SampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside SampleNamespace");
}
}
// Create a nested namespace, and define another class.
namespace NestedNamespace
{
class SampleClass
{
public void SampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside NestedNamespace");
}
}
}
class Program
{
static void Main(string[] args)
{
// Displays "SampleMethod inside SampleNamespace."
SampleClass outer = new SampleClass();
outer.SampleMethod();
// Displays "SampleMethod inside SampleNamespace."
SampleNamespace.SampleClass outer2 = new SampleNamespace.SampleClass();
outer2.SampleMethod();
// Displays "SampleMethod inside NestedNamespace."
NestedNamespace.SampleClass inner = new NestedNamespace.SampleClass();
inner.SampleMethod();
}
}
}
完整名稱
命名空間和型別具有唯一名稱,而這個名稱是由表示邏輯階層架構的完整名稱所描述。 例如,陳述式 A.B 代表 A 是命名空間或型別的名稱,而 B 是以巢狀方式置於其內部。
下面範例中便具有巢狀的類別和命名空間。 每一實體後的註解代表完整的名稱。
namespace N1 // N1
{
class C1 // N1.C1
{
class C2 // N1.C1.C2
{
}
}
namespace N2 // N1.N2
{
class C2 // N1.N2.C2
{
}
}
}
在先前的程式碼片段中:
N1 命名空間是全域命名空間的一個成員。 其完整名稱是 N1。
N2 命名空間是 N1 的一個成員。 其完整名稱是 N1.N2。
C1 類別是 N1 的一個成員。 其完整名稱是 N1.C1。
這段程式碼中用了兩次 C2 類別名稱, 但是該完整名稱仍具唯一獨特性。 第一個 C2 執行個體是在 C1 內宣告,因此其完整名稱為 N1.C1.C2。 第二個 C2 執行個體是在 N2 命名空間內宣告,因此其完整名稱為 N1.N2.C2。
您可以使用之前的程式碼片段,將新的類別成員 C3 加入 N1.N2 命名空間中,如下所示:
namespace N1.N2
{
class C3 // N1.N2.C3
{
}
}
一般來說,會使用 :: 參考命名空間別名,或使用 global:: 參考全域命名空間,以及使用 . 限定型別或成員。
將 :: 與參考型別的別名一起使用會造成錯誤,應與參考命名空間的別名一起使用才正確。 例如:
using Alias = System.Console;
class TestClass
{
static void Main()
{
// Error
//Alias::WriteLine("Hi");
// OK
Alias.WriteLine("Hi");
}
}
請注意,global 一字並不是預先定義的別名,因此 global.X 並沒有任何特殊意義。 只有在與 :: 一起使用時,這個字才會有特殊的意義。
如果您定義名為 global 的別名就會產生編譯器警告 CS0440,因為 global:: 一定會參考全域命名空間而非別名。 例如,下列的程式行會產生警告:
using global = System.Collections; // Warning
將 :: 與別名一起使用是很好的方式,並且可以避免未預期地加入其他型別。 例如,請考慮下列程式碼範例:
using Alias = System;
namespace Library
{
public class C : Alias.Exception { }
}
這種方式可以運作,但是如果往後加入名為 Alias 的型別,Alias. 就會繫結至該型別。 使用 Alias::Exception 確保將 Alias 視為命名空間別名,而不會誤認為型別。
如需 global 別名的詳細資訊,請參閱 HOW TO:使用全域命名空間別名 (C# 程式設計手冊) 主題。