クラスがある場合
class widget {
public int theNum;
public string theName;
}
そして私はこのように初期化します
widget wgt = new widget { thename="tom" };
theNum
ゼロになります。
インスタンスwgtを調べて、メンバーtheNumがデフォルトになっている、つまりオブジェクトの初期化から除外されていることを確認する方法はありますか?
クラスがある場合
class widget {
public int theNum;
public string theName;
}
そして私はこのように初期化します
widget wgt = new widget { thename="tom" };
theNum
ゼロになります。
インスタンスwgtを調べて、メンバーtheNumがデフォルトになっている、つまりオブジェクトの初期化から除外されていることを確認する方法はありますか?
フィールドである限り、theNum
初期化されていないままであるか、デフォルト値に明示的に初期化されているか(この場合はですが、ある場合は0
異なる可能性がありますpublic int theNum = 42
)はわかりません。
プロパティの場合theNum
は、プロパティを設定した値に関係なく、プロパティセッター内からフラグを設定して、セッターが呼び出されたかどうかを判断できます。例えば:
class widget {
private int theNum;
private bool theNumWasSet;
public string theName;
public int TheNum
{
get { return theNum; }
set { theNumWasSet = true; theNum = value; }
}
}
1つのオプションは、代わりに変更theNum
することint?
です...その場合、デフォルト値は0とは異なるnull値になります。
これらはパブリックフィールドではなくパブリックプロパティであると思います。その場合、フィールド値がnullかどうかをテストすることで、プロパティタイプを作成し、バッキングフィールドタイプとしてint
保持int?
し、初期化をチェックする他の方法を提供できます。 。
(の省略形である。をint
使用する代わりに、有効なintに初期化する人がいない場合、nullになります。int?
System.Nullable<int>