(2022/2/25更新)
覚えること
- 親のコンストラクタは必ず呼ばれる
0. 何も書かない場合
デフォルトコンストラクタが呼ばれる
public class Base { } public class Sub : Base { public Sub() { Debug.Log("Sub()"); } } public class Main : MonoBehaviour { void Start() { Sub s = new Sub(); } }
// public Base() {}が自動で作られ,呼ばれている Sub()
1. 引数なしコンストラクタのみの場合
引数なしコンストラクタが呼ばれる
public class Base { public Base() { Debug.Log("Base()"); } } public class Sub : Base { public Sub() { Debug.Log("Sub()"); } } public class Main : MonoBehaviour { void Start() { Sub s = new Sub(); } }
Base() Sub()
2. 引数ありコンストラクタのみの場合
引数ありコンストラクタが呼ばれる
public class Base { public Base(int a) { Debug.Log($"Base(int {a})"); } } public class Sub : Base { // 親が引数ありコンストラクタしか持たないため, // 必ずbase(int a)を呼び出す必要がある. public Sub() : base(100) { Debug.Log("Sub()"); } } public class Main : MonoBehaviour { void Start() { Sub s = new Sub(); } }
Base(int 100) Sub()
3. 引数ありなし両方の場合
どちらかが呼ばれるようにする
public class Base { public Base() { Debug.Log("Base()"); } public Base(int a) { Debug.Log($"Base(int {a})"); } } public class Sub : Base { // 親の引数なしコンストラクタを呼ぶ場合 public Sub() { Debug.Log("Sub()"); } // 親の引数ありコンストラクタを呼ぶ場合 public Sub() : base(100) { Debug.Log("Sub()"); } } public class Main : MonoBehaviour { void Start() { Sub s = new Sub(); } }
Base() // 引数なしを呼ぶ場合 Base(int 100) // 引数ありを呼ぶ場合 Sub()
その他
UnityのAwake()やStart()は挙動が違うので注意すること