using 指示詞是簡化型別引用、解決命名衝突的利器,分為別名指示詞與命名空間指示詞兩大類,各有獨特語法與作用域規則。
using 別名 = 命名空間或型別全名;
Widget 類別時,using W1=Lib1.Widget; using W2=Lib2.Widget;using Msg=MyProgram.CSharp.FirstApp.WelcomeMessage;using IntList=System.Collections.Generic.List<int>;namespace N3 {
using R = N1.N2; // 僅在這個 N3 區塊有效
}
namespace N3 { // 第二個 N3 區塊
class B : R.A {} // 錯誤:R 在此處不可見!
}
// 正確做法:將 using 置於檔案頂層(編譯單元層級)
using R = N1.N2;
namespace N3 { class B : R.A {} }
namespace N3 { class C : R.A {} } // 此處也可見
using 命名空間名;
using 引入同名型別會導致歧義編譯錯誤,需用別名或完整名稱消歧namespace N1 { class A {} }
namespace N2 { class A {} }
namespace N3 {
using N1; using N2;
// class B : A {} // 錯誤:A 有歧義
using A = N1.A; // 別名消歧
class B : A {} // 正確:繼承 N1.A
}
// 1. 別名指向命名空間,再用點號存取型別
using R = N1.N2;
class B : R.A {}
// 2. 別名指向泛型型別
using Dict = System.Collections.Generic.Dictionary<string, int>;
Dict map = new Dict();
// 3. 搭配 extern alias 解決組件級型別衝突(需編譯器參數 /reference:Alias=File.dll)
extern alias LibV1; extern alias LibV2;
using V1 = LibV1::MyNamespace;
using V2 = LibV2::MyNamespace;
using,避免散落在命名空間內部using System; 等過度寬泛匯入,增加歧義風險usingglobal using(C# 10+)集中宣告通用匯入