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

【C#入門】コンストラクターのオーバーロードの使い方と実装例

コンストラクターのオーバーロードとは

同じクラスの中に、同じ名前のコンストラクターが複数定義されており、それぞれのパラメーター(引数)の数や型が異なる場合、これを「コンストラクターのオーバーロード」と呼びます。オーバーロードを活用することで、状況に応じたさまざまな初期化方法でオブジェクトを柔軟に生成できるようになります。

例で学ぶコンストラクターのオーバーロード

それでは、C#でコンストラクターのオーバーロードをどのように扱うのか、具体的な例を見ていきましょう。

この例では、2つの科目の点数を表すdouble型のフィールドと、学生名を格納するstring型のフィールドを宣言します。

private double SubjectOne;
private double SubjectTwo;
string StudentName;

ここでは、3人の学生について各科目の結果を表示します。コンストラクターのオーバーロードを示すため、この例では名前が表示されるのは3人目の学生のみです。

Student s1 = new Student();
Student s2 = new Student(90);
Student s3 = new Student("Amit", 88, 60);

s1は引数なしのコンストラクター、s2は引数が1つのコンストラクター、s3は引数が3つのコンストラクターを呼び出しています。このように、渡す引数の違いに応じて、適切なコンストラクターが自動的に選択されます。

以下のコードを実行して、C#におけるコンストラクターのオーバーロードの実装を実際に確認してみてください。

サンプルコード

using System;
namespace Program {
    class Student {
        private double SubjectOne;
        private double SubjectTwo;
        string StudentName;

        // 引数なしのコンストラクター
        public Student() {
            this.SubjectOne = 80;
        }

        // 引数が1つのコンストラクター
        public Student(double SubjectOne) {
            this.SubjectOne = SubjectOne;
        }

        // 引数が3つのコンストラクター
        public Student(string StudentName, double SubjectOne, double SubjectTwo) {
            this.SubjectOne = SubjectOne;
            this.SubjectTwo = SubjectTwo;
            this.StudentName = StudentName;
        }

        public double GetSubjectOneMarks() {
            return this.SubjectOne;
        }

        public double GetSubjectTwoMarks() {
            return this.SubjectTwo;
        }

        public string GetStudentName() {
            return this.StudentName;
        }
    }

    class Program {
        static void Main(string[] args) {
            Student s1 = new Student();
            Student s2 = new Student(90);
            Student s3 = new Student("Amit", 88, 60);

            Console.WriteLine("One");
            Console.WriteLine("Subject One Marks: {0}", s1.GetSubjectOneMarks());
            Console.WriteLine();

            Console.WriteLine("Second");
            Console.WriteLine("Subject One Marks: {0}", s2.GetSubjectOneMarks());
            Console.WriteLine();

            Console.WriteLine("Third");
            Console.WriteLine("Student name: {0}", s3.GetStudentName());
            Console.WriteLine("Subject One Marks: {0}", s3.GetSubjectOneMarks());
            Console.WriteLine("Subject Two Marks: {0}", s3.GetSubjectTwoMarks());

            Console.ReadKey();
        }
    }
}

実行結果

One
Subject One Marks: 80

Second
Subject One Marks: 90

Third
Student name: Amit
Subject One Marks: 88
Subject Two Marks: 60

まとめ

コンストラクターのオーバーロードを使えば、引数の数や型の組み合わせごとに異なる初期化処理を提供できます。引数さえ異なっていれば、同名のコンストラクターをいくつでも定義できるため、クラス設計の自由度と可読性が大きく向上します。

  1. JavaScriptのArray.prototypeコンストラクタとは?配列に独自メソッドを追加する方法

    JavaScriptのArray.prototypeコンストラクタは、配列オブジェクトに新しいメソッドやプロパティを追加するための仕組みです。ここで追加したメソッドやプロパティは、その後作成されるすべての配列から利用できるようになります。 Array.prototypeの基本的な仕組み JavaScriptでは、すべての配列インスタンスはArray.prototypeを継承しています。そのため、このプロトタイプに独自のメソッドを定義すると、組み込みのmap()やfilter()と同じように、任意の配列から直接呼び出すことが可能になります。 次の例では、配列の偶数番目の要素を大文字へ、奇数番目の

  2. JavaScriptのDateコンストラクタープロパティとは?使い方を実例で解説

    JavaScriptのDateコンストラクタープロパティは、その日付オブジェクトを生成した元となるコンストラクター関数(Date())を返すプロパティです。すべてのJavaScriptオブジェクトが持つconstructorプロパティの一つで、Dateオブジェクトに対して使用すると、function Date() { [native code] }という形式の関数定義が出力されます。 このプロパティを活用することで、あるオブジェクトが本当にDateインスタンスであるかを確認したり、動的に新しいDateオブジェクトを生成したりすることができます。以下に、実際の動作を確認できるサンプルコードを紹介