2

(MVVMLight の ViewModelBase を拡張する) クラスに次のものがあるとします。

private ObservableCollection<Merchant> merchants;

public ObservableCollection<Merchant> Merchants
{
    get { return merchants; }
    set { Set(nameof(Merchants), ref merchants, value); }
}

クラス内で、プロパティまたはバッキング フィールドの値を初期化する必要がありますか? クラスのメソッドでは、プロパティまたはバッキング フィールドを使用する必要がありますか?

私はちょうど学んでいて、両方を使用する傾向があり、違いはわかりません。

簡単に言えば、クラス内で、プロパティまたはそのバッキング フィールドを使用する必要がありますか?

4

4 に答える 4

5

私は財産と一緒に行きます。このようにして、ゲッターまたはセッター (検証など) にロジックを追加するときに、他に何も変更する必要はありません。

于 2013-10-16T07:55:02.390 に答える
5

それは本当にあなたが何をしたいかによって異なります。

プロパティが発生するときPropertyChangedは、バッキング フィールドの代わりにプロパティ セッターを使用することをお勧めします。これは、クラス内からであっても、変更された値が消費者に通知されるようにするためです。

ただし、例外が 1 つあります。コンストラクター内では、バッキング フィールドを使用します。その時点ではコンシューマーがイベントをサブスクライブしていない可能性があるPropertyChangedため、コンストラクターからイベントを発生させる必要がないからです。

セッターに他のロジック (検証など) がある場合は、常にバッキング フィールドの代わりにプロパティ セッターを使用する必要があります。

于 2013-10-16T07:58:53.750 に答える
0

getter と setter の両方を持つプロパティの場合は、次の構文で自動プロパティを使用します。

public ObservableCollection<Merchant> Merchants { get; set; }

それらの 1 つへのアクセスを制限する必要がある場合は、次のようにします。

public ObservableCollection<Merchant> Merchants { get; private set; }

プライベートバッキングフィールドを使用する唯一の理由は、それがreadonlyであり、コンストラクターで初期化する場合、またはプロパティ値の設定に追加のロジックがある場合 ( INotifyPropertyChangedを実装する場合など) のいずれかです。

また、プロパティ アクセスを使用すると、リファクタリングしやすくなります。

結論: 不変 (読み取り専用) フィールドであるか、プロパティのセッター ロジックを回避したい場合を除き、プロパティ セッターを使用します。

于 2013-10-16T08:01:08.117 に答える