- 別名指示詞:為命名空間或型別設定別名,以便簡化程式碼
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 命名空間別名宣告時不可互相使用