首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 類訪問修飾符:public、private、internal 與程序集邊界

     編輯:程式設計綜合問答

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 不可訪問

關鍵點解析

  1. 添加引用 ≠ 可訪問所有類:引用只使程序集元數據可見,internal 類型對外部調用者不可見
  2. 命名空間與程序集無關:同一命名空間可分佈在多個程序集;同一程序集可包含多個命名空間
  3. 實例化只是使用方式之一:繼承、泛型參數、反射調用同樣受訪問性限制

屬性/方法級別的 private set

public 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 → 寫入權限收窄為 private
  • 實現「對外只讀、內部可寫」的封裝模式

最佳實踐

  • 類默認 internal,需跨程序集暴露才改 public
  • 盡量減少 public 表面積,降低耦合
  • 使用 InternalsVisibleTo 單元測試友好暴露內部類型

理解程序集邊界與訪問修飾符,是設計整潔、可維護 .NET 架構的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved