講義メモ 文法編

文法編:「引数のあるコンストラクタ」「インターフェイス」等

引数のあるコンストラクタ

・クラスや構造体において、オブジェクトの生成時に自動的に実行されるのがコンストラクタ
・オブジェクトの生成時にやってほしいことがあれば、自分でコンストラクタを書くことで、オブジェクトの生成時に実行してもらえる
・メソッドと同様に、コンストラクタにも引数を0個以上指定できる
・「new クラス名()」のカッコ内に値や式を指定すると、その数と型に対応するコンストラクタが呼び出される
・例: public クラス名(int i) { Debug.Log(i); } というコンストラクタがあれば、
 クラス名 参照変数 = new クラス名(整数値や整数式); と生成すると呼び出される
・メソッドのオーバーロード(引数の数と型が違えば同名のものを複数定義できる)はコンストラクタも同様
・よって、多数のコンストラクタを呼び出しパターンの分だけ定義しておくことができる
・主に、生成時にデータメンバに与えたい初期値を受け取るコンストラクタを作成することが多い

ミニ演習 mini03031

・Slime0303クラスを定義。データメンバはstring name、int hpとする
・コンストラクタ()ではnameを"名無し"、hpを10で生成
・コンストラクタ(string n)ではnameをn、hpを10で生成
・コンストラクタ(int h)ではnameを"名無し"、hpをhで生成
・コンストラクタ(string n, int h)ではnameをn、hpをhで生成
・名前とhpを表示するshowメソッドをSlime0303クラスに定義して用いよう
・Main側で4パターンを用いてスライム4匹を生成しshowメソッドで表示しよう

作成例

using UnityEngine;
class Slime0303 {
    string name;
    int hp;
    public void show() { //名前とHPを出力
        Debug.Log("名前:" + name + " HP:" + hp);
    }
    public Slime0303() { //デフォルトコンストラクタ
        name = "名無し"; hp = 10;
    }
    public Slime0303(string n) { //コンストラクタ(名前のみ)
        name = n; hp = 10;
    }
    public Slime0303(int h) { //コンストラクタ(hpのみ)
        name = "名無し"; hp = h;
    }
    public Slime0303(string n, int h) { //コンストラクタ(名前とHP)
        name = n; hp = h;
    }
}
public class mini03031 : MonoBehaviour {
    void Start() {
        Slime0303 suralin = new Slime0303();
        suralin.show();
        Slime0303 hoimin = new Slime0303("ホイミン");
        hoimin.show();
        Slime0303 behoimin = new Slime0303(200);
        behoimin.show();
        Slime0303 rimuru = new Slime0303("リムル", 500);
        rimuru.show();
    }
}

引数のあるコンストラクタ:続き

・メソッドの引数の場合と同様にコンストラクタで値のチェックを行うことで、データメンバに不適切な値が格納されることを防ぐこともできる

例:

using UnityEngine;
class Slime0303 {
    string name;
    int hp;
    public void show() { //名前とHPを出力
        Debug.Log("名前:" + name + " HP:" + hp);
    }
    public Slime0303(string n, int h) { //コンストラクタ(名前とHP)
        name = n;
        if (h > 0) { //HPが正の数であれば用いる
            hp = h;
        }
    }
}
public class mini03031 : MonoBehaviour {
    void Start() {
        Slime0303 rimuru = new Slime0303("リムル", -500);
        rimuru.show();
    }
}

ジェネリクスメソッド

・C言語などでは同じ処理内容でも与えるデータの型が違う場合、その違いの数だけ名前が異なる関数(メソッド)を作成する必要がある。
・C#などでは、オーバーロードにより、同じ名前のメソッドにできる
・加えて、型情報を受け取ることができるのがジェネリクスメソッド
・ジェネリクスメソッドはC#やUnityが提供するものもあるが、プログラマが自作することもできる
・型情報を受け取る変数に該当するものが型パラメータで、ジェネリックパラメータともいう
・ジェネリクスメソッドを自作する場合、型パラメータは大文字のTなどを用いることが多い

ジェネリクスメソッドの例:2値の両方を出力するLog2メソッド

・int型用に作ると: public void Log2(int a, int b) { Debug.Log(a); Debug.Log(b); }
・ジェネリクスメソッドにすると
 : public void Log2<T>(T a, T b) { Debug.Log(a); Debug.Log(b); }
・呼び出し方は: Log2<int>(10, 20);
・このまま実数にして: Log2<double>(3.14, 2.12);

提出:ミニ演習 mini03032.cs

・上記のジェネリクスメソッドの例を試すプログラムを作ろう

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です