2

(VS2010 を使用。パフォーマンスは問題ではないと仮定します)。

すべてのプロパティ変更のイベントを実装する特定のオブジェクトがあります。オブジェクトをすべてのデフォルトのプロパティ値に「リセット」する必要がある場合があります。これを行う最も簡単な方法は、単純に新しいオブジェクトを作成することです:

Object1= New MyObject

ただし、元のオブジェクトのイベント サブスクライバーの場合、これはすべてのプロパティ値の変更に相当します。たとえば、サブスクライバーがプロパティへの更新のみをリッスンしている場合、A新しいオブジェクトの構築の可能性も認識している必要があります。これにより、サブスクライバーに余分な労力がかかるようです。(たとえば、「NewObjectAssigned」イベントを作成する必要があり、プロパティ変更のサブスクライバーもそれを処理する必要があります。)

代わりに、オブジェクトに Reset メソッドを装備することを考えていたので、上記のコードは次のように変更されます。

Object1.Reset

そうすれば、Object1 の参照は変更されず、Resetすべてのプロパティが手動でデフォルト値に変更されるため、すべての propertychanged イベントがトリガーされます。しかし、これも適切ではなく、単に新しいオブジェクトを宣言するのに比べて面倒です。すべてのプロパティを手動でリセットしたり、変更されたすべてのイベントを発生させたりするメソッドが必要になるのは気が引けると思います。新しいプロパティがクラスに追加されるたびに、このメソッドを更新することを覚えておく必要があります。あるいは、これは私が考えているほど問題ではないかもしれません。

これは十分に単純なシナリオであり、何らかの方法でこれに関するベスト プラクティスがあると確信しています。どちらが好ましいですか?

4

2 に答える 2

1

イベント ハンドラーをアタッチしたままにする必要がある場合は、新しいインスタンスを作成する代わりにリセットを使用する必要があります。オブジェクトが を実装している場合は、 nullINotifyPropertyChangedに設定してリセット用の単一のイベントを送信できます。PropertyName

MSDN から:

propertyName パラメーターの空の値または null は、すべてのプロパティが変更されたことを示します。

于 2013-03-27T16:40:42.263 に答える
0

Peter Ritchie の最初のコメントに同意すると思います。私の最初の質問には、「好ましい」方法を決定するために必要な詳細が欠けていました。現状では、新しいオブジェクト参照の処理とサブスクライバーへのイベントの公開を担当するラッパー クラスの彼の提案におそらく従います。

于 2013-05-01T19:52:53.053 に答える