C#のprotected internal(保護された内部)メンバー変数のアクセス範囲とは?
C#の「protected internal(保護された内部)」アクセス修飾子は、クラスのメンバー変数やメソッドへのアクセスを制限するために使用されます。この修飾子を付けたメンバーは、同じアプリケーション(アセンブリ)内にある派生クラス(子クラス)からのみアクセスでき、それ以外の外部クラスやオブジェクトからは隠蔽されます。
つまり、継承関係にあるクラス同士でデータを共有しながら、外部からの不正なアクセスを防ぎたい場合に有効なアクセスレベルです。
以下の例では、基底クラス「One」でprotected internalとして宣言された変数「a」に、派生クラス「Two」のオブジェクトからアクセスしています。
サンプルコード
using System;
class One {
protected internal int a = 50;
private int b;
}
class Two : One {
public Two() {
Console.WriteLine(this.a);
}
}
class Demo {
static void Main() {
Two t = new Two();
// 派生クラスのオブジェクトなのでアクセス可能
t.a = 20;
}
}実行結果
50
コードのポイント
- 変数「a」はprotected internalで宣言されているため、派生クラス「Two」のコンストラクタ内で「this.a」として参照できます。
- Mainメソッド内でも、派生クラス「Two」のオブジェクト「t」を通じて「t.a = 20;」という代入が許可されます。
- 一方、「private」で宣言された変数「b」は、派生クラスからもアクセスできません。
このように、protected internalを使うことで、クラス内部のデータを守りつつ、継承による柔軟な拡張を実現できます。
-
C#におけるクラスのデフォルトアクセス修飾子とは?internalの基本を解説
C#では、クラスやメンバにアクセス修飾子を明示的に指定しなかった場合、デフォルトのアクセスレベルはinternal(内部)になります。internalアクセス指定子が付いたクラスやメンバは、同じアセンブリ(同一プロジェクト・同一EXE/DLL)内にある他のクラスやメソッドから自由にアクセスできます。ただし、アセンブリの外部からは参照できないため、ライブラリ内部でのみ使用する型やメンバを定義したい場合に適しています。言い換えると、internalメンバは「そのメンバが定義されているアプリケーション(アセンブリ)内であれば、どのクラス・どのメソッドからでもアクセス可能」ということになります。int
-
C#のクラスにおけるメンバー変数とは?意味と使い方を徹底解説
C#におけるクラスとメンバー変数の基本C#において、クラスはメンバー変数(フィールド)とメソッド(関数)を含む「設計図」であり、そこから生成されるオブジェクトの状態や振る舞いを定義するものです。まずはクラスの基本構文を確認し、メンバー変数がどのように宣言されるのかを見ていきましょう。クラスの基本構文<アクセス修飾子> class クラス名 { // メンバー変数 <アクセス修飾子> <データ型> 変数1; <アクセス