C# では、default キーワードによってジェネリッククラスの型 T に既定値を割り当てることができます。ここでは、単純なサンプルによってその動作を確認しています。
スポンサーリンク
default キーワードによる既定値 : 値型 ( 0 ) 参照型 ( null )
default キーワードにって割り当てられる既定値は、int や long などの値型の場合は 0 、string や class オブジェクトなどは null が割り当てられます。構造体の場合は、構造体のメンバ変数ごとの型によって、0 か null が割り当てられます。
以下のサンプルコードを参照ください。また、詳細はサンプル内のコメントを参照ください。
C#
// サンプルで使用するジェネリッククラス
public class DefaultTest<T>;
{
public T GetDefault()
{
// default キーワードで既定値を設定しリターン
T d = default(T);
return d;
}
}
// サンプルで使用する構造体
public struct DefaultStruct
{
public int i; // 値型
public object o; // 参照型
}
// サンプルで使用するユーザークラス
public class DefaltClass
{
// ToString メソッドをオーバーライド
public override string ToString()
{
return "default string";
}
}
/*
* 以下、動作確認コード
*/
// 値型 int の動作確認
DefaultTest<int> dti = new DefaultTest<int>();
Console.WriteLine(dti.GetDefault().ToString()); // 0
// 参照型(null 許容型) string の動作確認
DefaultTest<string> dts = new DefaultTest<string>();
//Console.WriteLine(dts.GetDefault().ToString()); // ★例外発生
// 構造体の動作確認
DefaultTest<DefaultStruct> dtst = new DefaultTest<DefaultStruct>();
Console.WriteLine(dtst.GetDefault().i.ToString()); // 0
//Console.WriteLine(dtst.GetDefault().o.ToString()); // ★例外発生
// ユーザークラスの動作確認
DefaultTest<DefaltClass> dtc = new DefaultTest<DefaltClass>();
//Console.WriteLine(dtc.GetDefault().ToString()); // ★例外発生
// 発生する例外の内容
// System.NullReferenceException
// オブジェクト参照がオブジェクト インスタンスに設定されていません。