コンテンツにスキップ

フィールドの初期化と既定値

書き方説明注意
private int V;初期化子なし
private int A = 1;宣言と同時の代入
private int B = 2 + 3;式による初期化
private int V = Max;初期化子での定数の利用
private static int V = 7;静的フィールドの初期化
private int[] A = new int[3];配列の初期化
new Point()struct の既定値
書き方説明エラー理由代替
static C() { V = 7; }静的コンストラクタTUKI0001環境フィールドの初期化子か Start に置く
[ModuleInitializer] static void Init()モジュール初期化子TUKI0001環境同上
実行されない理由静的コンストラクタもモジュール初期化子も、型を最初に使うときや読み込みのときに 1 回だけ実行されることを前提にした仕組みで、実行環境にはその 1 回を実行する仕組みがありません
記述する場所初期化は、フィールドの初期化子か Start に置きます

初期化子を書かないフィールドは、既定の値(int なら 0)で始まります。

using UnityEngine;
using Tsukimi;
public class InNoInit : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 0
}
private int V;
}
using UnityEngine;
using Tsukimi;
public class InFieldOrder : TsukimiBehaviour
{
void Start()
{
Debug.Log(B); // => 2
}
private int A = 1;
private int B = 2;
}
using UnityEngine;
using Tsukimi;
public class InFieldExpr : TsukimiBehaviour
{
void Start()
{
Debug.Log(B); // => 5
}
private int A = 1;
private int B = 2 + 3;
}
using UnityEngine;
using Tsukimi;
public class InConstFirst : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 10
}
private const int Max = 10;
private int V = Max;
}
using UnityEngine;
using Tsukimi;
public class InStaticFieldInit : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 7
}
private static int V = 7;
}
using UnityEngine;
using Tsukimi;
public class InArrayFieldInit : TsukimiBehaviour
{
void Start()
{
Debug.Log(A.Length); // => 3
}
private int[] A = new int[3];
}

new で作った struct は、すべてのフィールドが既定の値で始まります。

using UnityEngine;
using Tsukimi;
public struct Point { public int X; }
public class InStructDefault : TsukimiBehaviour
{
void Start()
{
Point p = new Point();
Debug.Log(p.X); // => 0
}
}