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

C#のネストされたクラス(入れ子クラス)とは?基本構文と使い方をわかりやすく解説

ネストされたクラス(入れ子クラス)とは

ネストされたクラス(nested class/入れ子クラス)とは、別のクラス(外側のクラス=エンクロージングクラス)の中で宣言されたクラスのことです。ネストされたクラスは、その外側のクラスのメンバーとして扱われます。

ここで重要なポイントは、外側のクラスのメンバーは、ネストされたクラスのメンバーに直接アクセスできないという点です。両者はあくまで独立した存在であり、アクセス修飾子に従ってアクセスを制御する必要があります。

C#におけるネストされたクラスのコード例

以下は、C#でネストされたクラスを定義・利用するサンプルコードです。

class One {
    public int num1;

    public class Two {
        public int num2;
    }
}

class Demo {
    static void Main() {
        One a = new One();
        a.num1++;

        One.Two ab = new One.Two();
        ab.num2++;
    }
}

コードの解説

この例では、クラス Two がネストされたクラスです。クラス Two は、クラス One の宣言ブロック内に囲まれる形で定義されています。

ネストされたクラスをインスタンス化する際は、One.Two ab = new One.Two(); のように、「外側のクラス名.ネストされたクラス名」という形式で指定する点に注目してください。これは、ネストされたクラスが外側のクラスに属するメンバーであることを示しています。

アクセシビリティについて

この例のクラス Two には public のアクセス修飾子が付いているため、クラス One のスコープ外からでもアクセスできます。

もしアクセス修飾子を private に変更すれば、クラス Two はクラス One の内部からしか利用できなくなります。この特性を活かすことで、外部に公開したくない補助的なクラスを、関連するクラスの中にカプセル化して隠蔽することが可能です。

ネストされたクラスを使うメリット

  • カプセル化の強化: 外部から見えないべきヘルパークラスを、外側のクラス内に閉じ込められます。
  • 関連性の明確化: 特定のクラスでしか使わない型を、そのクラスの中に定義することでコードの意図が伝わりやすくなります。
  • 名前空間の整理: クラス名の衝突を避け、型の階層構造を整理できます。

このように、ネストされたクラスはC#においてコードの構造を整理し、設計の意図を明確にするための便利な機能です。

  1. Pythonのメタクラスとは何か?基本概念と主な活用例をわかりやすく解説

    メタクラスとは メタクラス(metaclass)とは、クラスをインスタンスとして持つ「クラスのためのクラス」のことです。 通常のクラスがそのインスタンス(オブジェクト)の振る舞いを定義するように、メタクラスはクラスそのものの生成方法や振る舞いを定義します。イメージとしては、クラスという設計図からオブジェクトが作られるように、メタクラスというさらに上位の設計図からクラスが作られる、という関係になります。 Pythonにおけるメタクラスのサポート Pythonは言語仕様としてメタクラスをサポートしています。デフォルトのメタクラスは type であり、Python 3では次のように metaclas

  2. Pythonの基本オーバーロードメソッドとは?仕組みと使い方を実例で解説

    Pythonのクラスが持つオブジェクト指向の標準機能Pythonのクラスは、オブジェクト指向プログラミング(OOP)パラダイムに必要な標準的な機能をすべて備えています。その中核となるのがクラス継承の仕組みで、Pythonでは複数の基底クラス(親クラス)から同時に継承できる「多重継承」がサポートされています。さらに、派生クラス(子クラス)は基底クラスの任意のメソッドを自由に上書き(オーバーライド)できます。また、オーバーライドしたメソッドの中から、super()を使って同じ名前の基底クラスのメソッドを呼び出すことも可能です。メソッドオーバーライドの基本例以下は、基底クラスのメソッドを派生クラスで