【軟工基本功】Public? Private? 比較各種修飾詞存取範圍

會寫程式的人大多都知道 Public, Private 這些存取修飾詞
突然有一天同事問我:

要怎麼讓寫的 Class 只能在自己的 Namespace 被呼叫?

頓時突然覺得自己雖然懂這些存取修飾詞
但時常還是會忘記存取範圍, 還是必須Google一下


為了之後快速複習, 就寫了此篇文章
用表格方式呈現各個語言修飾詞的存取範圍

  • public (C#, PHP, TypeScript, C++, JAVA)
    • 類別: 無限制存取
    • 成員: 無限制存取
  • private (C#, PHP, TypeScript, C++, JAVA)
    • 類別: 只有自身Class可存取
    • 成員: 只有自身Class可存取
  • protected (C#, PHP, TypeScript, C++, JAVA)
    • 類別: 自身Class, 被繼承Class 皆可存取
    • 成員: 自身Class 可存取, 被繼承Class 無法存取
  • internal (C#)
    • 類別: 相同命名空間 (相同dll存取) 可存取
    • 成員: 只有自身Class可存取
  • protected internal (C#)
    • 類別: 自身Class, 被繼承Class 皆可存取
    • 成員: 自身Class, 相同命名空間, 被繼承Class 皆可存取
  • private protected (C# 7.2)
    • 類別: 自身Class, 被繼承Class 皆可存取
    • 成員: 自身Class 可存取, 被繼承Class無法存取
  • package (JAVA)
    • 類別: 自身Package 可存取
    • 成員: 自身Package 可存取
  • 字母大小寫 (GoLang)
    • 大寫相當 public
    • 小寫相當 private
Package 組件內部組件 Inside Assembly外部組件 Outside Assembly
private protected
(C# 7.2)
修飾詞基礎類別繼承類別繼承成員其他類別繼承類別繼承成員其他類別
public
protected internal
internal
protected
private
C# 存取範圍修飾詞 Access modifiers

 

 C#PHPTypeScriptC++JAVAGoLang
public字母大寫
private字母小寫
protected
internal
protected internal
private protected
package
各語言修飾詞

 

簡單繪製 C# Access modifiers 供大家參考

留言

Top