▪️.Net - 存取修飾詞
2025-3-18
| 2025-3-19
字數 919閱讀時間 3 分鐘
💡
C#提供多種存取修飾詞,用於控制類型和成員的可見性與可訪問性。
正確使用存取修飾詞是實現封裝原則的重要方式。

主要存取修飾詞

public


最寬鬆的存取層級,沒有存取限制。
  • 可見性: 任何其他程式碼都可以存取該類型或成員
  • 使用場景: 設計為被外部程式碼廣泛使用的API

private


最嚴格的存取層級,限制在宣告的類型內部使用。
  • 可見性: 只有在宣告它的類型內部可見
  • 使用場景: 隱藏實作細節,防止外部程式碼直接存取內部資料

protected


允許宣告類型及其衍生類型存取。
  • 可見性: 只能在宣告它的類型內部及衍生類別中存取
  • 使用場景: 允許子類別重用或覆寫功能,同時對外部程式碼隱藏

internal


限制在同一組件(Assembly)內使用。
  • 可見性: 只在當前組件(.dll或.exe)內可見
  • 使用場景: 允許組件內的程式碼協作,但防止外部組件存取

protected internal


結合了protectedinternal,允許在同一組件中或衍生類別中存取。
  • 可見性: 可在當前組件中的任何程式碼存取,或在任何組件中的衍生類別存取
  • 使用場景: 建立可由同一組件內的程式碼或衍生類別使用的框架功能

private protected (C# 7.2+)


限制在同一組件中的衍生類別使用。
  • 可見性: 只能在宣告類型的同一組件中的衍生類別內部存取
  • 使用場景: 限制功能只能由同一組件中的衍生類別使用

存取修飾詞比較表


修飾詞
同一類別
衍生類別(同一組件)
非衍生類別(同一組件)
衍生類別(不同組件)
非衍生類別(不同組件)
public
protected
internal
protected internal
private protected
private

預設存取修飾詞


如果未指定存取修飾詞,C#會使用以下預設值:
內容
預設修飾詞
命名空間中的類別、結構、介面、列舉
internal
類別和結構的成員
private
介面成員
public (不可更改)
列舉成員
public (不可更改)

最佳實踐


  1. 最低權限原則:總是使用限制最嚴格的存取修飾詞,只公開必要的成員
  1. 隱藏實作細節:使用private隱藏內部實作細節
  1. 公開的API:只將穩定且設計好的API標記為public
  1. 組件內部合作:使用internal限制跨組件訪問
  1. 繼承考量:只在需要讓衍生類別訪問或覆寫時使用protected
  1. 測試可訪問性:考慮使用[InternalsVisibleTo]特性允許測試組件存取internal成員
  • Dotnet
  • .Net - 特殊修飾詞.Net - 類型宣告
    Loading...