C# 中類的可見性修飾符(public、internal、private 等)控制類型在「程序集內部」與「程序集外部」的可訪問性。本文通過具體示例釐清概念。
| 修飾符 | 同程序集內 | 其他程序集(引用後) |
|---|---|---|
public | ✅ 可訪問 | ✅ 可訪問 |
internal (默認) | ✅ 可訪問 | ❌ 不可見 |
private (巢狀類) | 僅包含類可訪問 | ❌ 不可見 |
方案結構:
Lib.dll (Class Library 專案)
// Lib.dll
public class PublicClass { public void Say() => Console.WriteLine("Public"); }
internal class InternalClass { public void Say() => Console.WriteLine("Internal"); }
App.exe (Console App 專案) → 專案引用 Lib.dll
// App.exe
using Lib; // 引用命名空間
new PublicClass().Say(); // ✅ 編譯通過,運行正常
// new InternalClass().Say(); // ❌ 編譯錯誤:InternalClass 不可訪問
internal 類型對外部調用者不可見private setpublic class User {
public string Name { get; private set; } // 外部可讀,僅內部可寫
public User(string name) => Name = name;
public void Rename(string n) => Name = n; // 內部方法可修改
}
get 無修飾符 → 默認與屬性訪問性一致(此處 public)private set → 寫入權限收窄為 privateinternal,需跨程序集暴露才改 publicpublic 表面積,降低耦合InternalsVisibleTo 單元測試友好暴露內部類型理解程序集邊界與訪問修飾符,是設計整潔、可維護 .NET 架構的基石。