0

クラスがある場合

class widget {
    public int theNum;
    public string theName;
}

そして私はこのように初期化します

widget wgt = new widget { thename="tom" };

theNumゼロになります。

インスタンスwgtを調べて、メンバーtheNumがデフォルトになっている、つまりオブジェクトの初期化から除外されていることを確認する方法はありますか?

4

3 に答える 3

3

フィールドである限り、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; }
    }
}
于 2013-01-25T15:50:19.840 に答える
3

1つのオプションは、代わりに変更theNumすることint?です...その場合、デフォルト値は0とは異なるnull値になります。

これらはパブリックフィールドではなくパブリックプロパティであると思います。その場合、フィールド値がnullかどうかをテストすることで、プロパティタイプを作成し、バッキングフィールドタイプとしてint保持int?し、初期化をチェックする他の方法を提供できます。 。

于 2013-01-25T15:50:47.507 に答える
0

(の省略形である。をint使用する代わりに、有効なintに初期化する人がいない場合、nullになります。int?System.Nullable<int>

于 2013-01-25T15:51:51.607 に答える