はじめに
今回は色んな型の既定値についての記事になります!
その前に「既定値ってなんや?」といった疑問が生まれるかもしれません。
かくいう私も少し前まで曖昧でした。
簡潔に書くと、既定値は明示的な初期化を怠った時に既定で代入される値のことを指します。
例えばint a;
やstring s;
のように明示的な初期化をしていなかった場合は0
やnull
といった値が代入されます。
これについて様々な型だとどんな値が代入されるのか、実験していきたいと思います!
予備知識
ややネタバレに近いですが、既定値は0
,false
,null
のどれかになります。
これは値型か参照型のどちらかであるかが原因です。
なぜかというと、null
は参照型の何も参照していない状態を表しているので、値型には設定することができません(null許容型を除く)。
加えて構造体の既定値はすべてのフィールドを既定値で埋めたものになります。
これも構造体が値型であるのでnull
は代入することができないということです。
また、既定値はジェネリックでよく用いられるdefault(T)
によって求めることができます。
今回はこれを用いて調べていきたいと思います!
実験
using UnityEngine; public struct SampleStruct { } public enum SampleEnum { } public class SampleClass { } public interface ISampleInterface { }; public class Hoge : MonoBehaviour { private void Start() { Debug.Log(CheckDefaultValue<int>()); //int(値型): 0 Debug.Log(CheckDefaultValue<float>()); //float(値型): 0 Debug.Log(CheckDefaultValue<bool>()); //bool(値型): false Debug.Log(CheckDefaultValue<char>()); //char(値型): '\0' Debug.Log(CheckDefaultValue<SampleStruct>()); //構造体(値型): 前述 Debug.Log(CheckDefaultValue<SampleEnum>()); //列挙型(値型): 0 Debug.Log(CheckDefaultValue<int?>()); //null許容型int(値型): null Debug.Log(CheckDefaultValue<string>()); //string(参照型): null Debug.Log(CheckDefaultValue<SampleClass>()); //クラス(参照型): null Debug.Log(CheckDefaultValue<ISampleInterface>()); //インターフェイス(参照型): null Debug.Log(CheckDefaultValue<System.Action>()); //デリゲート(参照型): null Debug.Log(CheckDefaultValue<int[]>()); //配列(参照型): null } private T CheckDefaultValue<T>() { return default(T); } }
さいごに
かなり予想通りな結果になりました。
ただこういう基礎がいずれ役に立つことがあるかもしれません。
覚えておいて損はないでしょう!
また公式で一覧があるみたいです。
もっと詳しく知りたい方は是非。
既定値の一覧表 - C# リファレンス | Microsoft Docs