四種基本修飾符
| 修飾符 | 含義 | 適用目標 |
public | 訪問不受限制 | 類、結構、接口、委托、枚舉、成員 |
protected | 僅限包含類及其派生類訪問 | 類成員、嵌套類型 |
internal | 僅限當前程序集內訪問 | 類、結構、接口、成員 |
private | 僅限包含類型內部訪問 | 類成員、嵌套類型 |
五種訪問級別(組合修飾符)
| 級別 | 聲明 | 訪問範圍 |
| Public | public | 任何程序集、任何代碼 |
| Protected | protected | 當前類 + 派生類(跨程序集也可) |
| Internal | internal | 當前程序集內任何代碼 |
| Protected Internal | protected internal | 當前程序集內 + 派生類(跨程序集) |
| Private | private | 僅當前類型內部 |
| Private Protected (C# 7.2+) | private protected | 當前程序集內的派生類 |
最佳實踐原則
- 封裝性:字段默認
private,暴露屬性(public/internal)。
- 繼承設計:供派生類重寫的方法用
protected 或 protected internal。
- 程序集邊界:內部實現類/方法用
internal,不暴露給外部引用者。
- 接口實現:顯式實現接口成員時不加修飾符(默認
public),隱式實現可加 public。
快速查閱表
| 同類 | 同程序集派生類 | 同程序集非派生類 | 不同程序集派生類 | 不同程序集非派生類
--------------------|------|----------------|------------------|------------------|------------------
public | ✓ | ✓ | ✓ | ✓ | ✓
protected internal | ✓ | ✓ | ✓ | ✓ | ✗
internal | ✓ | ✓ | ✓ | ✗ | ✗
protected | ✓ | ✓ | ✗ | ✓ | ✗
private protected | ✓ | ✓ | ✗ | ✗ | ✗
private | ✓ | ✗ | ✗ | ✗ | ✗