11

おそらくこれはばかげた質問かもしれませんが、私は C# の初心者 (Java のバックグラウンドが強い) であり、プロパティのゲッターとセッターに関して見たさまざまな例の間で混乱しています。

状況によっては、コードは次のようになります。

    private string _something;
    public string Something
    {
        get { return _something; }
        set { _something = value; }
    }

ただし、他の例では、このバッキングメンバーを使用していないため、次のようになります。

    public string Something { get; set; }

もちろん、変数の設定に関する複雑なロジックがない限り、これらのバッキング変数 (_something) を使用する利点は実際にはわかりません。

後者のアプローチを使用してプログラムを作成していますが、何も見逃していないことを確認したかったのです。

人々が前者を選んだ理由を誰かが簡単に説明できますか? それはもっと「良い習慣」ですか?

どうもありがとう!

4

6 に答える 6

10

もちろん、変数の設定に関する複雑なロジックがない限り、これらのバッキング変数(_something)を使用する利点はわかりません。

使用しない場合はメリットはありません。2番目のアプローチでは、バッキング変数がまだありますが、コンパイラーにそれを追加する作業を任せています。.NET 3.5以降では、現在のアプローチは完全に有効です。

もちろん、追加のロジックを導入する必要があるとすぐに、バッキングストアを自分で管理することが重要になります。

于 2012-10-04T21:28:19.937 に答える
6

前者の構文は.NET3.5より前に必要であったため、古いコードに含まれています。

機能的には同等です。

于 2012-10-04T21:27:51.600 に答える
3

最初の構文を使用する理由の1つは、プロパティがフロントエンド要素にバインドされているMVVMアーキテクチャで使用するためです。

何かのようなもの:

    private string _something;
    public string Something
    {
        get { return _something; }
        set { 
              _something = value; 
              OnNotifyPropertyChanged("Something");
            }
    }

これにより、バインドされたプロパティが変更され、更新する必要があることがフロントエンドに警告されます。

于 2012-10-04T21:30:07.177 に答える
2

public string Something {get; セットする; }は速記です。バックグラウンドでは、上記とまったく同じことを行っています。

于 2012-10-04T21:28:12.147 に答える
0

2番目のアプローチは自動実装プロパティです

于 2012-10-04T21:30:11.980 に答える
0

インスタンス内から自動プロパティを参照することは、カプセル化の原則を破る public フィールドを宣言することと同じです。したがって、同じクラス内でそれらにアクセスしない場合は、自動プロパティを使用してください。それ以外の場合は、メンバー (バッキング) フィールドを使用し、通常の .NET プロパティを介してそれらを公開しながら、ローカル メソッドからそれを参照します。

.NET 3.0 でシンタックス シュガーとして自動プロパティが追加されたため、クラス内で参照されないバッキング フィールドは不要になりました。

于 2012-10-04T21:37:15.243 に答える