[C#, CSharp, C Sharp 教學 教程 教材 Tutorial] using別名指示詞(Using Alias Directive)
YehYeh\'s Notepad yehyeh@gmail.com 

[C#, CSharp] using別名指示詞(Using Alias Directive)

using別名指示詞(Using Alias Directive)

  • 別名指示詞:為命名空間或型別設定別名,以便簡化程式碼
    using Co = System.Console;            //為命System.Console設定別名Co
    
    class 類別
    {
        System.Console.WriteLine("Hello World");    //原來的寫法
        Co.WriteLine("Hello World");                //使用命名空間別名
    } 
    
  • 使用using別名指示詞設定的別名在編譯單位內或命名空間中必須是唯一的
    class 類別  { }                            
    using 類別 = System.Console;    // X 不可宣告2個都叫類別的識別字
    

    using 別名 = System;            
    using 別名 = System.Console;    // X 不可宣告2個都叫別名的識別字
    
  • using別名指示詞沒有順序性
  • using別名指示詞中指定的命名空間或型別,可以為using別名指示詞所在的命名空間,也可以為其內層命名空間或型別
  • 當泛型時,別名不可帶型別參數,且指定的命名空間或型別一定要帶型別參數
    namespace 命名空間1
    {
        類別1<型別>
        {
            class 類別2 {}
        }
    }
    
    namespace 命名空間2
    {
        using 正確別名 = 命名空間1.類別1<int>;
    
        using 錯誤別名1 = 命名空間1.類別1;             // X 未指定型別參數
        using 錯誤別名2 = 命名空間1.類別1.類別2;        // X 未指定型別參數
        using 錯誤別名3<int> = 命名空間1.類別1.類別2;   // X 別名不可帶型別參數
    }
    
  • using別名指示詞只作用於所屬的命名空間中
    • 若using別名指示詞屬於global命名空間,則作用於整個編譯單元
    namespace 命名空間1
    {
        using 別名 = System.Console;        //只在命名空間1的範圍內有效
        class 類別
        {
            別名.WriteLine("Hello");        // O
        }
    }
    
    namespace 命名空間2
    {
        class 類別
        {
            別名.WriteLine("Hello");        // X
        }
    }
    
  • 在巢狀命名空間時,若內層空間有同名的識別字,則別名在內層空間沒有效用
    namespace 外層命名空間
    {
        using 識別字 = System.Console;          //名為識別字的別名
    
        namespace 內層命名空間
        {
            class 識別字{}                      //名為識別字的類別
    
            class 類別
            {
                // X 識別字參考到"內層命名空間.識別字",而非System.Console
                識別字.WriteLine("Hello");  
            }
        }
    }
    
  • 命名空間別名宣告時不可互相使用,但可以使用外部別名
    extern alias 外部別名;
    using 命名空間別名1 = 命名空間1;
    using 命名空間別名2 = 外部別名.命名空間;      // O 命名空間別名宣告時可以使用外部別名
    using 命名空間別名3 = 命名空間別名1.命名空間2; // X 命名空間別名宣告時不可互相使用
    
Δ 回到最上方