實際應用由多個獨立編譯部分組成。命名空間提供邏輯組織,程序集提供物理打包部署。二者協同支撐基於組件的開發。本文對應規范第 1.12 節「命名空間和程序集」。
| 維度 | 命名空間 | 程序集 |
|---|---|---|
| 層面 | 邏輯組織 | 物理打包部署 |
| 作用 | 內部結構 + 外部公開 API 路徑 | 包含類型、IL 代碼、資源、引用 |
| 嵌套 | 支持多層嵌套 | 平面文件 (.exe/.dll) |
| 版本控制 | 無版本概念 | 核心版本單位 (四部分強名稱) |
| 可見性 | 編譯期訪問控制 | 運行時安全邊界、加載上下文 |
// 輸出 HelloLibrary.dll
namespace Microsoft.CSharp.Introduction
{
public class HelloMessage
{
public string Message => "hello, world"; // 唯讀屬性
}
}
命名空間嵌套等價寫法:
// 簡寫
namespace Microsoft.CSharp.Introduction { ... }
// 完整嵌套
namespace Microsoft
{
namespace CSharp
{
namespace Introduction { ... }
}
}
// 輸出 HelloApp.exe
using Microsoft.CSharp.Introduction; // using 指令:導入命名空間
class HelloApp
{
static void Main()
{
HelloMessage m = new HelloMessage(); // 簡短名稱
Console.WriteLine(m.Message);
}
}
// 類型別名
using MessageSource = Microsoft.CSharp.Introduction.HelloMessage;
// 命名空間別名
using Intro = Microsoft.CSharp.Introduction;
// 使用
MessageSource m = new MessageSource();
Intro.HelloMessage m2 = new Intro.HelloMessage();
# 1. 編譯類庫
csc /target:library HelloLibrary.cs
# 生成 HelloLibrary.dll
# 2. 編譯應用程序,引用類庫
csc /reference:HelloLibrary.dll HelloApp.cs
# 生成 HelloApp.exe
# 運行
HelloApp.exe
# 輸出: hello, world
命名空間解決「代碼在哪找、怎麼組織」,程序集解決「代碼怎麼打包、部署、版本、安全加載」。二者正交設計:一個程序集可包含多個命名空間,一個命名空間可跨多個程序集 (如 `System.Linq` 在 `System.Core.dll`)。掌握 `using`、別名、編譯引用、程序集標識、內部可見性,是構建大型模塊化 .NET 系統的基石。