使用命名空間 (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# 程式設計手冊) 主題。