大多數寫程式的人應該對 Public 和 Private 等存取修飾詞不陌生
這是 C# 中常用的基礎語法之一
有一天,同事突然問我一個更深入的問題,這讓我重新思考存取修飾詞的真正用途和它們如何影響類別之間的互動
這讓我開始探討不同存取修飾詞的適用情境,進一步理解它們在程式中的重要性
基本但常忘的存取修飾詞
要怎麼讓寫的 Class 只能在自己的 Namespace 被呼叫?
頓時突然覺得自己雖然懂這些存取修飾詞,但時常還是會忘記存取範圍,還是必須Google一下

為了方便日後快速複習,我特意寫了這篇文章,並用表格整理了各個存取修飾詞的使用範圍與區別
這不僅有助於鞏固概念,還能讓自己和其他開發者在需要時快速查找相關資訊
希望通過這樣的方式,讓存取修飾詞這個相對基礎的概念變得更簡單明瞭,讓日後工作中遇到類似問題時能夠快速解決
存取修飾詞整理
| 修飾詞 | 支援語言 | 類別存取範圍 | 成員存取範圍 |
|---|---|---|---|
| Public | C#, PHP, TypeScript, C++, JAVA | 無限制存取 | 無限制存取 |
| Private | C#, PHP, TypeScript, C++, JAVA | 只有自身類別可存取 | 只有自身類別可存取 |
| Protected | C#, PHP, TypeScript, C++, JAVA | 自身類別與繼承類別皆可存取 | 自身類別可存取,繼承類別無法存取 |
| Internal | C# | 相同命名空間或相同 DLL 可存取 | 只有自身類別可存取 |
| Protected Internal | C# | 自身類別、繼承類別、相同命名空間皆可存取 | 自身類別、相同命名空間與繼承類別皆可存取 |
| Private Protected | C# 7.2 | 自身類別與繼承類別皆可存取 | 自身類別可存取,繼承類別無法存取 |
| Package | JAVA | 同一 Package 內可存取 | 同一 Package 內可存取 |
| 大小寫規則 | GoLang | 大寫字母開頭相當於 Public,小寫字母開頭相當於 Private | 大寫字母開頭相當於 Public,小寫字母開頭相當於 Private |
C# 存取範圍修飾詞 Access modifiers
| Package 組件 | 內部組件 Inside Assembly | 外部組件 Outside Assembly | |||||
|---|---|---|---|---|---|---|---|
| 修飾詞 | 基礎類別 | 繼承類別 | 繼承成員 | 其他類別 | 繼承類別 | 繼承成員 | 其他類別 |
| public | |||||||
| protected internal | |||||||
| internal | |||||||
| protected | |||||||
| private | |||||||
| private protected (C# 7.2) | |||||||
各語言修飾詞
| C# | PHP | TypeScript | C++ | JAVA | GoLang | |
|---|---|---|---|---|---|---|
| public | 字母大寫 | |||||
| private | 字母小寫 | |||||
| protected | ||||||
| internal | ||||||
| protected internal | ||||||
| private protected | ||||||
| package |
C# Access modifiers 存取範圍圖

整理的非常清楚!!謝謝!!