首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Effective C# 原則 33:限制型別可見度,封裝實作細節

     編輯:關於C#

最小權限原則:型別也需「需要知情」

並非所有型別都應為 public。在滿足功能前提下,應將型別存取層級限制在最小必要範圍。VS.NET 預設建立 public class 往往過度暴露,實際上許多類別僅供組件內部使用,應標記為 internal。

巢狀私有類別:封裝實作的利器

.NET Framework 大量採用此模式。例如 ArrayList 內部定義私有 ArrayListEnumerator 實作 IEnumerator:

public class ArrayList : IEnumerable
{
    private class ArrayListEnumerator : IEnumerator { ... }
    public IEnumerator GetEnumerator() => new ArrayListEnumerator(this);
}

優勢:

  • 消費者僅見介面(IEnumerator),不依賴具體實作類別。
  • 實作類別可隨時替換,不破壞相容性。
  • 私有類別無需符合 CLS 規範,僅公開介面需符合。

內部類別 + 介面:支援多實作切換

以電話號碼驗證為例:

public interface IPhoneValidator { bool ValidateNumber(PhoneNumber ph); }

internal class USPhoneValidator : IPhoneValidator { ... }
internal class InternationalPhoneValidator : IPhoneValidator { ... }

搭配 Factory 模式,外部僅見介面,實作類別隱藏於組件內部。新增地區驗證無需修改公開合約。

公開型別即契約:越少越好

公開的類別與介面構成組件契約,一旦發布便難以變更。盡量減少公開型別,保留未來擴充與重構彈性。預設使用 internal,唯有確須跨組件使用時才設為 public。

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