ホームに戻る
出典 :
アクセス修飾子 - C# プログラミング ガイド | Microsoft Learn アクセス修飾子 - C# リファレンス | Microsoft Learn アクセシビリティ レベル - C# リファレンス | Microsoft Learn
関連 :
レコード
目次 :

アクセス修飾子とアクセシビリティ

型と型メンバのアクセス可否(アクセシビリティ)を決定するには、アクセス修飾子を用いる。
同一アセンブリ 異なるアセンブリ 解説
自身 派生
クラス
それ
以外
派生
クラス
それ
以外
public 任意のコードからアクセス可能。
protected internal 不可 protected に加え、同一アセンブリ内の任意のコードからアクセス可能。
protected 不可 不可 自身または派生クラスからアクセス可能。
internal 不可 不可 同一アセンブリ内の任意のコードからアクセス可能。
private protected 不可 不可 不可 private に加え、同一アセンブリ内の派生クラスからアクセス可能。
private 不可 不可 不可 不可 自身のクラスからのみアクセス可能。
ここで「アセンブリ」は、ひとつのプロジェクトをビルドすることで作成される、DLL または EXE を意味する。
internal と public は、オブジェクトへのアクセスを同一のアセンブリに限定するか、アセンブリを跨ぐことを可能とするかが異なる。

アクセシビリティの指定可否

名前空間に直接宣言される(他のクラスや構造体の入れ子でない)クラス、レコード、構造体、およびインタフェースには、public または internal を指定できる。既定値は internal 。
クラス、レコード、およびインタフェースのメンバにはすべてのアクセス修飾子を適用できるが、構造体メンバには protected 、protected internal 、private protected を適用できない。
これは構造体が継承をサポートしていないことによる。
メンバ
クラス (class)
レコード (record)
インタフェース (interface)
構造体 (struct)
クラス
レコード
インタフェース
構造体
public
protected internal 不可 不可
protected 不可 不可
internal
private protected 不可 不可
private 不可

注意が必要な点

メンバのアクセシビリティはそれを含む型のアクセシビリティよりも緩くなってはならない。
(例 : クラスのアクセシビリティが internal で、メンバのアクセシビリティを public とするとエラーとなる。)
但し、インタフェースメソッドの実装(オーバーライド)は例外で、メソッドが public で宣言されている場合はクラスが internal でもメソッドを public とする必要がある。