Share via


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

請參閱

參考

命名空間 (C# 程式設計手冊)

命名空間關鍵字 (C# 參考)

. 運算子 (C# 參考)

:: 運算子 (C# 參考)

extern (C# 參考)

概念

C# 程式設計手冊