在 C# 中,我們可以使用 using 指令為現有的命名空間或類型建立別名,這在解決名稱衝突、簡化冗長的命名空間路徑時非常實用。基本語法如下:
using 別名 = 現有的命名空間或類型;
例如:using soholife = System; 即將 System 命名空間簡稱為 soholife。
別名不僅能簡化命名空間引用,還能直接用於類別繼承。請看下例:
namespace N1.N2
{
class A {}
}
namespace N3
{
using A = N1.N2.A; // 為 N1.N2.A 建立別名 A
class B : A {} // B 直接繼承 N1.N2.A
}
這裡 N3.B 實際上繼承自 N1.N2.A。同樣效果也可以透過命名空間別名達成:
namespace N3
{
using R = N1.N2; // 為命名空間 N1.N2 建立別名 R
class B : R.A {} // 透過 R.A 存取 N1.N2.A
}
若在同一命名空間中已經存在同名類型,再嘗試建立同名別名會導致編譯錯誤。例如:
namespace N1.N2 { class A {} }
namespace N3
{
class A {} // N3 已有類別 A
using A = N1.N2.A; // 錯誤:別名 'A' 與類別 'A' 名稱衝突
}
解決方式是使用不同的別名名稱,如 using B = N1.N2.A;。
這是許多開發者容易忽略的重點:別名的作用域僅限於宣告它的命名空間區塊。請看以下錯誤範例:
namespace N1.N2 { class A {} }
namespace N3
{
using R = N1.N2; // 別名 R 宣告在第一個 N3 區塊
}
namespace N3 // 第二個 N3 區塊(視為獨立宣告區塊)
{
class B : R.A {} // 錯誤:此處無法存取別名 R
}
雖然是同名命名空間 N3,但 C# 將每個 namespace N3 { ... } 視為獨立的宣告區塊,別名 R 不會跨區塊共享。
若需在多個區塊共用別名,必須將 using 別名宣告放在命名空間定義之前:
using R = N1.N2; // 全域別名宣告
namespace N3
{
class B : R.A {} // 正確:可存取別名 R
}
這樣別名 R 即成為全域可用,所有後續的命名空間區塊皆可引用。
using 別名 = 類型/命名空間 簡化程式碼與解決衝突。掌握這些細節,能讓你在大型專案中更靈活地管理命名空間,避免常見的編譯錯誤與維護困擾。