1

重複の可能性:
C# .NET 3.5+ のプロパティとフィールドの違い フィールド
の代わりに自動的に実装されたプロパティを使用する必要があるのはなぜですか?

以下の両方の例はまったく同じことを行い、クラスの内外で同一のアクセス書き込みを行います...では、なぜ誰もが例 2 ではなく例 1 を使用しているように見えるのでしょうか? 何かが足りないだけだと確信していますが、これはしばらくの間私を悩ませていて、明確な答えを見つけることができませんでした.

class SampleClass
{
    /// Example 1
    /// Shown by online examples. 
    /// Why use a Field AND a Property where you could just use Example 2?
    private int age;
    public int Age { get { return age; } }
    private void setAge()
    {
        age = 1;
    }

    /// Example 2
    /// Tidier code and better understanding of how Age2 can be accessed. 
    /// Personally I prefer this method, though am I right to use it over Example 1?
    public int Age2 { get; private set; }
    private void setAge2()
    {
        Age2 = 1;
    }
}
4

3 に答える 3

1

プロパティ セッターまたはゲッターで実際の機能を提供する場合は、バッキング フィールドを使用する必要があります。たとえば、セッターで検証を行いたい場合は、バッキング フィールドを使用する必要があります。

public class MyClass
{
    private string myString = "blah";

    public string MyNotNullString
    {
        get
        {
            return this.myString;
        }
        set
        {
            if (value == null)
            {
                throw new ArgumentNullException("Cannot set MyNotNullString to null");
            }
            this.myString = value;
        }
    }
}
于 2012-11-27T19:26:43.653 に答える
0

@Platinum Azureの回答のように、フィールドが必要な状況がない限り、可能であれば毎回Example2を使用します。

Example1 について私が考えることができる唯一の他の利点は、getter メソッドまたは setter メソッドにブレークポイントを設定できることです。これにより、誰が値を変更しているかをすばやく見つけることができます。

于 2012-11-27T19:40:02.030 に答える