4

自動プロパティを初期化する必要がありますか?

public string thingy { get; set; }

私が尋ねる理由は、null のデフォルト値が許容値である場所で使用された一連のコードに出くわしたからです。

コンパイラは文句を言いません。

一般的なポイントとして、デフォルトで数値をゼロに設定し、オブジェクト参照を null に設定する場合、コンパイラが初期化を強制するのはなぜですか?

4

2 に答える 2

5

autopropeties initialize default(T)by 特別な値で初期化する場合は、バッキング フィールドを使用できます。

private string _thingy = "value";
public string Thingy
{
    get { return _thingy; }
    set { _thingy = value; }
}

またはコンストラクターで値を設定します

public class MyClass
{
    public string Thingy{get;set;}
    public MyClass()
    {
        Thingy = "value";
    }
}

または任意の方法で設定

于 2012-08-03T08:05:08.443 に答える
3

コンパイラは、フィールドやプロパティではなく、ローカル変数の初期化を強制します。割り当てられていないローカル変数の使用はプログラムのバグの一般的な原因であるため、C#ではローカル変数を確実に割り当てる必要があります。これは、割り当てられていない変数にガベージが含まれている可能性があるためではなく(CLRはガベージが含まれないことを保証します)、プログラマーがコードに誤りを犯した可能性があるためです。

任意の順序で呼び出すことができる複数のメソッド間で必要なフロー分析を行うことは不可能であるため、コンパイラーはフィールドまたはプロパティを同じように扱いません。

于 2012-08-03T08:17:53.327 に答える