C# のネストされたクラス

Luqman Khan 2023年10月12日
  1. C# のネストされたクラス
  2. C# でネストされたクラスを使用する理由
  3. ネストされたクラスを C# に実装する
C# のネストされたクラス

このチュートリアルでは、C# プログラミング言語でネストされたクラスを紹介します。

クラスは、ユーザーによって定義され、物を構築するために使用される青写真またはパターンです。これは、メソッドとフィールド(アクションを定義するメンバー関数)を組み合わせた単一のインスタンスです。

C# のネストされたクラス

C# では、ユーザーはネストされたクラスと呼ばれる別のクラスを定義できます。その主な目的は、ネストされたクラスのスコープを制限することです。

通常のクラスと比較して、ネストされたクラスは、プライベート修飾子と保護の追加の可能性を提供します。親クラスコンテキスト内からこのクラスを呼び出すだけでよい場合は、通常、ネストされたクラスとして定義することをお勧めします。

このクラスがライブラリの外部で使用されると仮定します。通常、2つのクラスに概念的な関係があるかどうかに関係なく、ユーザーはそれを別個の同じレベルのクラスとして定義する方がアクセスしやすくなります。

パブリック親クラス内にネストするパブリッククラスを構築することが技術的に実現可能であっても、これが良いアイデアになることはめったにありません。

C# でネストされたクラスを使用する理由

ネストされたクラスを使用する理由はいくつかあります。

  • これは、一度だけ使用されるクラスをグループ化する実用的な手法です。
  • カプセル化が改善されました。
  • ネストされたクラスを使用すると、コードの読み取りと保守が容易になります。
  • 論理クラスのグループ化を容易にします。

クラスが他の 1つのクラスにとってのみ価値がある場合は、そのクラスにそのクラスを含めて、2つをまとめることが理にかなっています。このようなヘルパークラスをネストすることで、より簡単になります。

ネストされたクラスには、パブリックおよび内部アクセス修飾子に加えて、プライベートおよび保護された内部アクセス修飾子を含めることができます。

クラス内から返されたインターフェースを実装することが有益な場合があります。それでも、そのインターフェースの実装は、外の世界から完全に隠されている必要があります。

たとえば、yield が C# に導入される前は、列挙子の実装をプライベートクラスとしてコレクション内に埋め込み、それらを構築していました。コレクションのメンバーは簡単にアクセスできますが、外の世界では、これがどのように行われるかについての複雑さを必要とせず、見ることもありません。

ネストされたクラスを C# に実装する

以下は、ネストされたクラスの概念を説明するためのコードです。

クラス Program はプログラムのメインクラスであり、publicstaticmain メソッドがあります。外部クラス Outside_class を public として作成し、内部クラス Inside_class という名前の別のクラスを public として作成しました。

さらに、Outside_class 内と Inside_class 内の 2つのメソッドを作成しました。Outside_class オブジェクトから Inside_class メソッドにアクセスすることはできません。

この内部のメソッドにアクセスするには、Inside_class のインスタンスを作成する必要があります。

using System;

public class Program {
  public static void Main(string[] args) {
    // create instance of outside class
    Outside_class outinstance = new Outside_class();
    outinstance.outerclassmethod();
    // you can't access inside class methods from outside class objects
    // create instance of inside class
    Outside_class.Inside_class insideinstance = new Outside_class.Inside_class();
    // accessing the method of inside class.
    insideinstance.insideclassmethod();
    Console.Read();
  }
}
public class Outside_class {
  // Method of outside class
  public void outerclassmethod() {
    Console.WriteLine("here is Outside class method");
  }
  // Inner class
  public class Inside_class {
    // Method of inside class
    public void insideclassmethod() {
      Console.WriteLine("here is Inside class Method");
    }
  }
}

以下は、出力付きのネストされたクラスを使用したコードの画像です。

ネストされたクラスのコード

ネストされたクラスによってコードが読みやすくなることはすでに明らかです。互いに使用されるすべてのクラスをまとめることができます。

関連記事 - Csharp Class