C# コンストラクターのオーバーロード

Muhammad Zeeshan 2023年10月12日
  1. C# のコンストラクター
  2. C# でのコンストラクターのオーバーロード
  3. コンストラクターのオーバーロードの方法
C# コンストラクターのオーバーロード

コンストラクターのオーバーロードは、C# のこの記事で取り上げるトピックです。 開始するには、最初に C# のコンストラクターとは何かを理解する必要があります。

C# のコンストラクター

コンストラクター は、そのクラスのインスタンスが生成されるたびに呼び出される特定のクラス メソッドです。 このメソッドは、クラスのインスタンスが作成されると自動的にトリガーされます。

コンストラクターの主な機能は、クラスのインスタンスを構築する前にクラスのプライベート フィールドを初期化することです。 これは、インスタンスの作成と同時に発生します。

クラスのコンストラクターを手動で作成しない場合は、コンパイラーが作成し、クラスの既定のコンストラクターに名前を付けます。 zero 値はすべてのクラスの数値フィールドに割り当てられ、" " または Null 値はすべての文字列クラスとオブジェクト フィールドに割り当てられます (既定のコンストラクターが使用される場合)。

C# でのコンストラクターのオーバーロード

多数のコンストラクターを作成し、それぞれが独自の引数の組み合わせとそれらのパラメーターのさまざまな量を持つことを、コンストラクターのオーバーロードと呼びます。 これにより、通常とは異なる方法でクラスを利用できます。

クラスのコンストラクターのオーバーロードにより、同じクラスがコンテキストに応じて異なる動作をする可能性があります。 オブジェクトが最初に初期化されると、基本的なテキスト メッセージしか表示されない場合があります。

それでも、別の引数で 2 回目の初期化を行うと、何らかの数学的計算が行われる場合があります。 C# でのコンストラクターのオーバーロードは、他のプログラミング言語でのメソッドのオーバーロードと同様に可能であり、コンストラクターのオーバーロードを利用するには、2つ以上のコンストラクターが同じ名前を共有しているが、異なる機能を持っている必要があります。

コンストラクターのオーバーロードの方法

コンストラクターのオーバーロードは、さまざまな種類のパラメーター、さまざまな数のパラメーター、さまざまな順序のパラメーターなど、いくつかの方法で実行できます。

さまざまなタイプのパラメータを使用

この手順では、それぞれが同じ引数を持つ 2つの phone コンストラクター を設計します。 この場合、パラメーター内に含まれるデータ型が異なるため、同じ引数でコンストラクターを生成できます。

クラス Phone では、同じ名前を持つが互いに異なるデータ型を持つ 2つの コンストラクター を作成しました。 最初のコンストラクターは引数として文字列を受け入れますが、もう一方のコンストラクターは整数を受け入れます。

class Phone {
  Phone(string pbrand) {
    Console.WriteLine("Phone Brand is: " + pbrand);
  }
  Phone(int pprice) {
    Console.WriteLine("Phone Price is: " + pprice);
  }

main メソッドのコンストラクターをさまざまな引数でオーバーロードしました。 この場合、Object p は文字列型パラメーターでコンストラクターを呼び出しますが、Object p1int 型の引数でコンストラクターを呼び出します。

static void Main(string[] args) {
  Phone p = new Phone("iPhone x ");
  Console.WriteLine();

  Phone p1 = new Phone(10000);
  Console.ReadLine();
}
}

完全なソース コード:

using System;

namespace Shanii {
  class Phone {
    Phone(string pbrand) {
      Console.WriteLine("Phone Brand is: " + pbrand);
    }
    Phone(int pprice) {
      Console.WriteLine("Phone Price is: " + pprice);
    }

    static void Main(string[] args) {
      Phone p = new Phone("iPhone x ");
      Console.WriteLine();

      Phone p1 = new Phone(10000);
      Console.ReadLine();
    }
  }
}

出力:

Phone Brand is: iPhone x
Phone Price is: 10000

パラメータの数が異なる場合

次の例は、Phone コンストラクターに 2つのコンストラクターがあることを示しています。一方にはパラメーターがなく、もう一方にはパラメーターがあります。

Phoneクラスに同じ名前の 2つのPhone コンストラクターを作成しました。 1つはパラメーターを必要としませんが、もう 1つは 1つのパラメーターを必要とします。

class Phone {
  Phone() {
    Console.WriteLine("A Phone Constructor with no parameter");
  }
  Phone(string pbrand) {
    Console.WriteLine("A Phone constructor with one parameter");
    Console.WriteLine("Phone Brand: " + pbrand);
  }
}

コンストラクターを作成したので、それらを Main() 関数で使用して、それぞれのメソッドを呼び出します。 ご覧のとおり、オブジェクト pp1 の両方が同じ名前の コンストラクター を呼び出します。

関連する コンストラクター は、コンストラクター に提供されたパラメーターの値に基づいて呼び出されます。

static void Main(string[] args) {
  Phone p = new Phone();
  Console.WriteLine();

  Phone p1 = new Phone("Samsung S22 ultra");
  Console.ReadLine();
}

完全なソース コード:

using System;
namespace Shanii {

  class Phone {
    Phone() {
      Console.WriteLine("A Phone Constructor with no parameter");
    }
    Phone(string pbrand) {
      Console.WriteLine("A Phone constructor with one parameter");
      Console.WriteLine("Phone Brand: " + pbrand);
    }

    static void Main(string[] args) {
      Phone p = new Phone();
      Console.WriteLine();

      Phone p1 = new Phone("Samsung S22 ultra");
      Console.ReadLine();
    }
  }
}

出力:

A Phone Constructor with no parameter

A Phone constructor with one parameter
Phone Brand: Samsung S22 ultra

パラメータの順序が異なる場合

ここには 2つの異なる コンストラクター があり、それぞれに同じ量の引数があります。 これは、パラメーターのデータ型の順序がさまざまな形式になる可能性があるため、実現可能です。

最初の Phone コンストラクターでは、文字列データ型が int データ型の前に来ますが、2 番目の Phone コンストラクターでは、intデータ型が文字列データ型の前に来ます。Phone コンストラクター。

Phone(string pbrand, int pprice) {
  Console.WriteLine("Phone Brand: " + pbrand);
  Console.WriteLine("Phone Price: " + pprice);
}
Phone(int Andriodversion, string pbrand) {
  Console.WriteLine("Phone Andriod Version: " + Andriodversion);
  Console.WriteLine("Phone Brand: " + pbrand);
}

Main() 関数でさまざまな順序で引数を渡すことにより、コンストラクターをオーバーロードしました。

static void Main(string[] args) {
  Phone p = new Phone("Samsung Galaxy s22", 10000);
  Console.WriteLine();

  Phone p1 = new Phone(15, " iPhone 13 pro");
  Console.ReadLine();
}

完全なソース コード:

using System;
namespace Shanii {
  class Phone {
    Phone(string pbrand, int pprice) {
      Console.WriteLine("Phone Brand: " + pbrand);
      Console.WriteLine("Phone Price: " + pprice);
    }
    Phone(int Andriodversion, string pbrand) {
      Console.WriteLine("Phone Andriod Version: " + Andriodversion);
      Console.WriteLine("Phone Brand: " + pbrand);
    }
    static void Main(string[] args) {
      Phone p = new Phone("Samsung Galaxy s22", 10000);
      Console.WriteLine();

      Phone p1 = new Phone(15, " iPhone 13 pro");
      Console.ReadLine();
    }
  }
}

出力:

Phone Brand: Samsung Galaxy s22
Phone Price: 10000

Phone Andriod Version: 15
Phone Brand:  iPhone 13 pro
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn