Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【C#入門】インスタンスとコンストラクタとは?

f:id:WillSpecter:20200811195608j:plain

C#を勉強していると、「クラス」「メソッド」「インスタンス」など色んな用語が出てきます。

今回は、オブジェクト指向で必須の「インスタンス」と「コンストラク」について紹介します。

クラスについては、こちらの記事を参考にしてください(本記事で紹介しているプログラム例はこちらの内容をもとにしています)。

 

 

インスタンスとは

 前回、クラスについて紹介しましたが、クラスはプログラムの中でintやstringなどの型と同様に扱うことができます。

クラスを呼び出すためには、クラスの型の変数を宣言する必要があるのですが、インスタンスを作成することで実現できます!

クラスとインスタンスをセットで覚えておくと良いと思います。

それでは、インスタンスの作成方法とプログラムの例を紹介します。

インスタンスの作成方法

 インスタンスでは、クラス型の変数にnew演算子を使ってクラスの実態を入れます。

            //インスタンスの書き方//
            クラス型の変数 = new クラス名();

 

例えば、Murabitoというクラスを呼び出してmurabit1という変数でMurabitoクラスのメンバを使いたいときはこうです。

            //村人1のインスタンスを作る
            Murabito murabito1 = new Murabito();

intやstringと同じようにMurabitoが型として使われてmurabito1という変数を定義しています。

 

このように、インスタンスを作成することで、クラスのメンバ(変数やメソッド)を使うことができるようになります。

 

メンバ変数やメンバメソッドにアクセスする方法は以下です。

・メンバ変数にアクセスするとき:変数名.メンバ変数名

・メンバメソッドにアクセスするとき:変数名.メンバメソッド名

 

こちらの例では、Murabitoクラスで作成したnameという変数に"たかし"という名前を代入しています。変数名がmurabito1でメンバ変数名がnameですね。

            //村人1のインスタンスを作り、名前と体力を代入
            Murabito murabito1 = new Murabito();
            murabito1.name = "たかし";

 

続いて、メソッドを呼び出す例です。Murabitoクラスで作成したDiscussというメソッドを呼び出しています。

           //村人クラスのメソッドを呼び出し 
       murabito1.Discuss();

プログラム例

こちらの記事で村人クラス(Murabito.cs)を作成しましたので、それを呼び出すProgram.csを作成していきましょう。

 

■Program.cs

Program.csを開き、Mainメソッドの中に記述していきます。

今回は、murabito1とmurabito2の変数を作成しました。

using System;

namespace JinroGame
{
    class Program
    {
        static void Main(string[] args)
        {
            //村人1のインスタンスを作り、名前と体力を代入
            Murabito murabito1 = new Murabito();
            murabito1.name = "たかし";
            murabito1.hp = 200;

            //村人2のインスタンスを作り、名前と体力を代入
            Murabito murabito2 = new Murabito();
            murabito2.name = "しゅん";
            murabito2.hp = 300;

            //村人クラスのメソッドを呼び出し
            murabito1.Discuss();
            murabito2.Vote();

        }
    }
}

 

■結果

f:id:WillSpecter:20200813122605p:plain

Program.csで設定した変数(たかし、しゅん)を入れてMurabito.csで設定したDiscussメソッドとVoteメソッドが呼び出されたことが分かりますね(^^)

 

これだけでもプログラムは動くのですが、コンストラクタを設定することで、より使いやすいプログラムになるので、紹介させていただきます。

コンストラクタとは

先ほどのプログラム例では、プログラムの中に直書きでメンバ変数を書いています。ただ、メンバ変数が多くなると代入が大変になりますよね。そこで、インスタンスを作ると同時にメンバ変数へ初期値を代入する仕組みがあり、それを「コンストラクタ」と呼びます。先ほどのプログラムにコンストラクタを作成していきましょう。

コンストラクタの作成方法

呼び出したいクラスの中に、コンストラクタを作成します。

コンストラクタの名前はクラスと同じにし、先頭にpublicをつけます。

「戻り値の型(voidなど)」は書かないので注意してください。

  // 初期値を代入するコンストラクタ//
        public クラス名()
        {
            クラスの初期化処理
        }

 

例では、MurabitoクラスのコンストラクタをMurabito.csに記述しています。初期設定として、nameとhpに値を代入をします。

        //Murabitoクラスのコンストラクタ

        public Murabito()
        {
            this.name = "たかし";
            this.hp = 100;
        }

インスタンスの例ではProgram.csでnameに"たかし"と代入していましたが、コンストラクタで設定したので、その記述は不要になります。

            //村人1のインスタンスを作り、名前と体力を代入
            Murabito murabito1 = new Murabito();
            murabito1.name = "たかし";       ←不要

 

これで実行すると、常に名前が「たかし」になってしまいます。必要に応じて名前と体力を代入するため、引数付きのコンストラクを作成しましょう。

引数付きのコンストラクタ作成方法

先ほど作成したコンストラクタの中に引数を持たせます。こちらの例では、name とhpの引数を設定しました。()の中にそれぞれの変数をセットすればよいですね。

        //Murabitoクラスのコンストラクタ(引数あり)

        public Murabito(string name, int hp)
        {
            this.name = name;
            this.hp = hp;
        }

 同様に、Program.csのインスタンスも引数を設定します。

            //村人1のインスタンスを作り、名前と体力を代入
            Murabito murabito1 = new Murabito("たかし",200);

設定は以上です(^^)

プログラム例

上記を踏まえて各プログラム例を紹介します。

 ■Murabito.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace JinroGame
{
    class Murabito
    {
        public string name; //村人の名前
        public int hp;   //村人の体力

        //Murabitoクラスのコンストラクタ(引数あり)

        public Murabito(string name, int hp)
        {
            this.name = name;
            this.hp = hp;
        }

        //議論メソッド
        public void Discuss()
        {
            Console.WriteLine("体力が"+this.hp+"の"+this.name + "は誰が人狼   か議論した");
        }
        //投票メソッド
        public void Vote()
        {
            Console.WriteLine("体力が" + this.hp + "の" + this.name + "は投票した");
        }
    }
}

■Program.cs

namespace JinroGame
{
    class Program
    {
        static void Main(string[] args)
        {
            //村人1のインスタンスを作り、名前と体力を代入
            Murabito murabito1 = new Murabito("たかし",200);

            //村人2のインスタンスを作り、名前と体力を代入
            Murabito murabito2 = new Murabito("しゅん", 300);

            //村人クラスのメソッドを呼び出し
            murabito1.Discuss();
            murabito2.Vote();

        }
    }
}

ひとこと

今回はインスタンスとコンストラクタについて紹介させていただきました。色んな用語が出てきますが、実際に手を動かしてプログラムを作っていくことで、理解が深まり定着に繋がると思います!

 

今回の説明は「確かな力が身につくC# 「超」入門」を参考にさせていただきましたが、「もっと前から読んでおきたかった!」と痛感しています、、もし、C#について学び始めたという方は是非参考にしてみてください!(2020年7月に出版された新書です^^)

 

C#入門としてその他にも紹介しておりますので、是非参考にしてください☆