命名空間提供邏輯層面的型別組織方式,不同於實體的檔案或組件。它賦予型別完整名稱(命名空間 + 型別名),避免同名類別衝突,並建立清晰的層級結構。本文詳細說明命名空間的定義、巢狀、using 指令、別名機制與企業級命名慣例。
使用 namespace 關鍵字宣告:
namespace CustomerPhoneBookApp
{
using System;
public struct Subscriber { /* 成員定義 */ }
}
Subscriber 的完整名稱為 CustomerPhoneBookApp.Subscriber。這使得相同簡短名稱的不同類別可共存於同一程式中。
命名空間可巢狀建立階層:
namespace Wrox
{
namespace ProCSharp
{
namespace Basics
{
class NamespaceExample { /* ... */ }
}
}
}
NamespaceExample 完整名稱為 Wrox.ProCSharp.Basics.NamespaceExample。等效的簡化寫法:
namespace Wrox.ProCSharp.Basics
{
class NamespaceExample { /* ... */ }
}
注意:不允許在另一個巢狀命名空間中宣告多部分的命名空間。
同一組件可包含多個命名空間;同一命名空間的型別可分散於不同組件中。這提供了極大的部署彈性。
在檔案頂部引入命名空間:
using System;
using Wrox.ProCSharp;
之後即可直接使用型別名稱(如 Console 而非 System.Console)。所有 C# 專案預設引用 System 命名空間。
若兩個引用的命名空間包含同名類別,需使用完整或較長名稱消除歧義:
using Wrox.ProCSharp;
class Test
{
public static int Main()
{
Basics.NamespaceExample nSEx = new Basics.NamespaceExample();
// 明確指定使用 Wrox.ProCSharp.Basics 中的類別
return 0;
}
}
切勿將 using 與 C/C++ 的 #include 混淆:using 不建立實體連結,C# 也無對應標頭檔的概念。
為冗長命名空間指定簡短別名,語法:using 別名 = 完整命名空間名稱;
using Introduction = Wrox.ProCSharp.Basics;
class Test
{
public static int Main()
{
Introduction.NamespaceExample nsEx = new Introduction.NamespaceExample();
Console.WriteLine(nsEx.GetNamespace());
return 0;
}
}
namespace Wrox.ProCSharp.Basics
{
class NamespaceExample
{
public string GetNamespace() { return this.GetType().Namespace; }
}
}
別名亦可用於類別,避免名稱衝突同時保持程式碼簡潔。
公司名稱.產品名稱.功能模組 格式(如 MyCorp.Finance.Reports)。Common、Utils)作為最上層命名空間。良好的命名空間設計不僅提升程式碼可讀性,更是大型專案可維護性的基石。