[ C# ] ジェネリッククラスの型Tに既定値を割り当てる ( default キーワード )

Pocket

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
// オブジェクト参照がオブジェクト インスタンスに設定されていません。
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *