C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#におけるprotected(保護された)メンバー変数のスコープとは?

protectedアクセス修飾子の基本

C#のprotectedアクセス修飾子は、そのクラス自身と、そこから派生した子クラス(派生クラス)に対してのみメンバーへのアクセスを許可するものです。つまり、protectedを付けたメンバー変数やメソッドは、外部のコードからは直接アクセスできませんが、継承関係にある子クラスからは自由に利用できます。

この仕組みにより、基底クラスの機能を子クラスに安全に引き継ぐことができ、オブジェクト指向プログラミングにおける継承(インヘリタンス)の実装を支える重要な要素となっています。

protectedメンバー変数の定義例

以下は、クラスAの中でprotectedメンバー変数を宣言した例です。

class A {
    protected int a2 = 87;
}

このa2protectedとして宣言されているため、クラスAの外部から直接アクセスすることはできません。しかし、クラスAを継承したクラスからであればアクセス可能です。

派生クラスからのアクセス例

次に、クラスAを継承したクラスBから、この変数にアクセスしてみましょう。派生クラスのオブジェクトを通じてアクセスすれば、コンパイルエラーなく正常に動作します。

サンプルコード

using System;
class A {
    protected int a2 = 87;
}
class B : A {
    static void Main() {
        A a = new A();
        B b = new B();
        b.a2 = 10;
    }
}

このコードでは、b.a2 = 10;のように、派生クラスBのオブジェクトを介して基底クラスAのprotectedメンバー変数a2に値を代入しています。これは問題なく実行できます。

注意点

一方、もしMainメソッド内でa.a2 = 10;のように、基底クラスAのオブジェクトに対して直接アクセスしようとすると、コンパイルエラーが発生します。protectedメンバーは「同じクラス内」または「その派生クラス」からしかアクセスできないためです。

まとめると、C#におけるprotectedメンバー変数のスコープは以下の通りです。

  • 宣言されたクラス自身の内部からアクセス可能
  • そのクラスを継承した派生クラスからアクセス可能
  • 継承関係のない外部コードや、基底クラスのオブジェクト経由での直接アクセスは不可

継承とアクセス修飾子の組み合わせについては、継承の章でさらに詳しく解説します。

  1. C#のArrayListクラスとは?主なメソッド一覧とSort()による並べ替え方法を解説

    ArrayListクラスは、個別にインデックスでアクセスできるオブジェクトの順序付きコレクションを表します。基本的には配列(Array)の代替として利用できる便利なコレクションです。要素数が事前にわからない場合でも動的にサイズが拡張されるため、柔軟なデータ管理が可能になります。ArrayListクラスの主なメソッドArrayListクラスには、要素の追加・削除・検索・並べ替えなどを行うための多彩なメソッドが用意されています。以下に主要なメソッドとその説明をまとめました。番号メソッドと説明1public virtual int Add(object value);ArrayListの末尾にオブジ

  2. C#のクラスにおけるメンバー変数とは?意味と使い方を徹底解説

    C#におけるクラスとメンバー変数の基本C#において、クラスはメンバー変数(フィールド)とメソッド(関数)を含む「設計図」であり、そこから生成されるオブジェクトの状態や振る舞いを定義するものです。まずはクラスの基本構文を確認し、メンバー変数がどのように宣言されるのかを見ていきましょう。クラスの基本構文<アクセス修飾子> class クラス名 {    // メンバー変数    <アクセス修飾子> <データ型> 変数1;    <アクセス