2

非常に単純な質問ですが、なぜそれを行うのかを理解することが非常に重要だと思います。

次のように、クラスにプロパティを作成できます。

最初のアプローチ:

public class MyClass
{
   public string MyProperty {get;set;}
}

2番目のアプローチ:

public class MyClass
{
    private string _myProperty;

    public string MyProperty
    {
        get
        {
            return _myProperty;
        }
        set
        {
            _myProperty = value;
        }
    }
}

ほとんどすべての記事は、後者のアプローチを使用しています。文字列値を保持するためにクラスに一時変数を作成する必要があるのはなぜですか。最初のアプローチだけを使用できないのはなぜですか?2番目のアプローチは何か利点がありますか?値を格納するための追加の変数を作成することは、メモリとパフォーマンスの面で悪いことではありませんか?

4

4 に答える 4

9

自動プロパティはC#3.0までC#に追加されなかったため、C#3.0がリリースされる前に、後の形式を使用する多くの例や記事が作成されました。プロパティセッターとゲッターで余分な作業を行う必要がない限り、どちらかを選択する理由はありません。

于 2010-12-12T18:24:57.880 に答える
1

自動セッター自動プロパティ、または自動実装プロパティ(最初のアプローチ)は、.NET Framework>=3.0でのみ使用できます。そのため、Framework 3.0リリースより前に作成された記事では、2番目のアプローチを使用しています。

2つのアプローチは同等です。内部的には同じように機能するので、コードを少なくして、可能な限り最初のアプローチを使用することをお勧めします。

于 2010-12-12T18:25:17.330 に答える
1

自動プロパティは常に利用できるとは限りませんでした。また、プロパティにある種の特別なアクションがあり、それをクラスの内部で実行したくない場合は、宣言された変数も役立ちます。

于 2010-12-12T18:26:55.727 に答える
1

もちろん、バッキング フィールドにアクセスできるようにしたい場合は、完全な構文を記述する必要があります。たとえば、変更イベントを発生させる場合:

private string _name;
public string Name
{
    get
    {
        return _name;
    }
    set
    {
        if (_name != value)
        {
            _name = value;
            RaisePropertyChanged("Name");  // assuming this method handles raising the event
        }
    }
}
于 2010-12-13T01:11:29.280 に答える