LoginSignup
1
0

More than 3 years have passed since last update.

コンストラクタって、なによ !??

Last updated at Posted at 2021-02-09

経緯

コンストラクタってなんぞ!??という学習履歴を体系的にまとめたかった為

コンストラクタの書く時のルール(特徴)

  • voidはつかない(但し、戻り値はない)
  • 命名はコンストラクタが存在するクラスの名前と同じものにする

コンストラクタの機能

  • newで変数にクラスを呼び出して定義した際に最初に呼び出され実行されるメソッド
  • もちろん引数を渡せばそれを使用した内容を実行してくれる
  • 全てのクラスにコンストラクタは与えられる(記述していなくても、コンパイラが自動で生成してくれる ← これをデフォルトコンストラクタと言う)

そう!結局、一番初めに実行されるメソッドだってことです!!
ポケモンでいうところの、モンスターを呼び出した時に最初の鳴き声ということです!!(よね!??)

ポケモン モンスター召喚時のコンストラクタ

いざ書いてみましょう。

program.cs
using System;

namespace test_constract
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("January");

            // コンストラクタの呼び出し
            Programs programs = new Programs();

            Console.WriteLine("February");

            // programsインスタンスを破棄
            programs = null;

            Console.WriteLine("March");
            Console.WriteLine("April");
            Console.WriteLine("May");
        }
    }

    class Programs
    {
        // コンストラクタの定義
        public Programs()
        {
            Console.WriteLine("コンストラクタが自動で呼ばれました");
        }
    }
}



出力結果(ターミナル)
January
コンストラクタが自動で呼ばれました
February
March
April
May

そういうことですね、
完全ニ理解シタ

もう少し書いてみましょう

複数あるコンストラクタを実行する

基本的に実行されるコンストラクタは1つのみで、複数あったとしても2つ目以降は実行されない。
ただし、複数のコンストラクタを実行する方法がある。
:this() を付けることで呼び出したいコンストラクタの前に基底となっているコンストラクタを呼び出して実行できる。

using System;

namespace test_constract
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 10;

            Console.WriteLine("これからコンストラクタを実行します");

            // コンストラクタの呼び出し
            Programs programs1 = new Programs();

            Console.WriteLine("");
            Console.WriteLine("~~~次は引数がintのコンストラクタも実行します~~~");
            Programs programs2 = new Programs(num);

            Console.WriteLine("");
            Console.WriteLine("~~~次は引数がstringのコンストラクタも実行します~~~");
            Programs programs3 = new Programs("Let's C#!!");

            Console.ReadLine();
        }
    }

    class Programs
    {
        // コンストラクタの定義
        public Programs()
        {
            Console.WriteLine("引数が無いコンストラクタです");
        }

        public Programs(int num):this()
        {
            Console.WriteLine("引数がint型 {0} のコンストラクタです",num);
        }

        public Programs(string str):this(4)
        {
            Console.WriteLine("引数がstring型 {0} のコンストラクタです", str);
        }
    }
}

これからコンストラクタを実行します
引数が無いコンストラクタです

~~~次は引数がintのコンストラクタも実行します~~~
引数が無いコンストラクタです
引数がint型 10 のコンストラクタです

~~~次は引数がstringのコンストラクタも実行します~~~
引数が無いコンストラクタです
引数がint型 4 のコンストラクタです
引数がstring型 Let's C#!! のコンストラクタです

基底となっている引数のないコンストラクタは2回呼び出されて、合計3回実行しています。
あと、引数がstringをとっているコンストラクタはthisの引数にintの値を与えることでその引数を利用して2番目のコンストラクタを実行しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0