0

これはどちらも同じですか:

private int x;
public int X
{
    get { return x; }
    set { x = value; }
}

public int X
{
    get { return x; }
    set { x = value; }
}

つまり、2 番目のケースを使用するだけで十分ですか、それとも最初のケースを使用する必要がある特別なケースがありますか?

最初のケースと2番目のケースのコードを時々見るので、混乱しました

4

4 に答える 4

2

xが宣言されていないため、2 番目のものはコンパイルされません。xを制御したくない場合は、次のように記述できます。

public int X { get; set; }
于 2012-05-17T09:40:46.633 に答える
1

x現在の定義スコープに存在しない場合、2 番目のケースは使用できません。

2 番目のケースのように、どこにも宣言が表示xされない場合、それは親クラスまたは基底クラスの保護されたフィールドである可能性がありますが、その可能性は非常に低いです。

それとも、明示的なバッキング フィールドなしで自動プロパティを作成するつもりでしたか? これまたは最初のケースは、通常発生するものです。

public int X { get; set; }
于 2012-05-17T09:38:21.603 に答える
1

2 番目のスニペットは正常にコンパイルされています。

以下は概念的に同じです

private int x;
public int X
{
    get { return x; }
    set { x = value; }
}

public int X {get;set;}

概念的に同じ理由: 2 番目のステートメントは、任意の名前 (必ずしも x ではない) でバッキング int フィールドを作成するためです。

于 2012-05-17T09:38:46.770 に答える
1

「x」(小文字)が定義されていないため、2番目のケースはコンパイルされません。

他のオプションは、「自動プロパティ」を使用することです

public int X {get; set;}

これが行うことは、直接アクセスできないバックグラウンド フィールドをコンパイラに自動的に生成させることですが、ほとんどは最初の例と同じです。

于 2012-05-17T09:39:24.583 に答える