2009-07-07 20 views
2

プロパティの実際の値が変更されていない場合、「プロパティ変更」イベントを発生させるのが適切ですか?「プロパティが変更されました」イベントはいつ呼び出されるべきですか?

public int SomeProperty 
{ 
    get { return this.mSomeProperty; } 
    set 
    { 
     this.mSomeProperty = value; 
     OnPropertyChanged(new PropertyChangedEventArgs("SomeProperty")); 
    } 
} 

これは、新しい値が古い値と同じ場合でもイベントをトリガーします。これは悪い習慣ですか?

+0

なぜあなたは返品をしていますか?あなたのセッターで? –

+0

私はそれを削除しました - 作業中のコーディング標準では、すべての関数の最後にreturn文が必要です。 –

+0

私はイベントの名前があなたの答えを与えると思います。このイベントは "PropertyChangeAttempt"という名前ではなく、 "PropertyChanged"と呼ばれます。 –

答えて

5

値が変更されない限り、イベントをスローしないことをお勧めします。

あなたのケースでは、プロパティはちょうど 'int'なので、単純な等価チェックです。

  • あなたは、異なる値を持つ別のインスタンスを設定しないプロパティの変更 - - あなたの財産は、それ自身の右にあるオブジェクトであった場合、あなたは再び同じインスタンスを設定

    1. を考慮することがより多くのケースがある投げプロパティの変更

    2. 異なる(ただし、2つの異なるオブジェクトが同じ値のセットを持ち、アプリケーションの観点から見て同等であるとみなされます) - プロパティの変更をスローします。

    最後の1つはいくつかの議論の対象となります...その属性がすべて同じであれば、実際にプロパティが変更されていますか?サブクラスの変更をサブスクライブするためにそのプロパティの変更を使用している人は、古いクラスから退会して新しいクラスにサブスクライブすることを知る必要があります。したがって、私は変更を発表する側で誤りです。

  • 4

    いいえ、元の値が実際に変更されていない限り、イベントを発生させないでください。

    通常、実際に異なる場合を除いて、基礎となる値を変更しようとすることさえ気にしないように、Setterをコーディングします。

    +0

    標準的なイディオムは、値がプロパティの基礎となるフィールドと同じかどうかをチェックし、値の場合はすぐに戻ります。それ以外の場合は、フィールドが更新され、イベントがトリガーされます。 –

    +0

    これは私が言っていることです..;) – NotMe

    4

    PropertySetterAccessedというイベントがあった場合は、値が変更されていないときに起動することが適切です。ただし、あなたのイベントはPropertyChangedと呼ばれているため、実際に発生したときにのみ起動する必要があります。あなたのイベント/方法/クラスなどが「彼らがスズについて言うこと」をしない場合、あなたは誰かのためにメンテナンスの悪夢を作り出しています。

    関連する問題