2012-03-14 26 views
0

プロパティを持つパブリッククラスがあります。ユーザーや内部コードによって変更することができます。プロパティがユーザーによって変更されたかどうかはどのように判断されますか?多分、この仕事のためのいくつかのパターンがありますか?プロパティが変更されたことを確認しました

私の問題は十分にはっきりしていないようです。 私は多くのプロパティを含むパブリッククラスを持つdllを持っています。 ユーザーが設定できます。 また、私のDLLの内部コードで設定されています。 そのプロパティがユーザーによって設定されているかどうかを知るためのメカニズムを作成する必要があります。

+0

ユーザーが変更したことを知る必要があるのは何ですか? –

+0

「外部ユーザーによる」 - クラスを使用している他のコードと、クラス自体の内部のコードを意味しますか? –

+0

Daniel A. White:プロパティがユーザーによって変更されたかどうかを別のクラスがチェックします。 – user393679

答えて

0

How to: Implement Property Changeをご覧ください。基本的には、INotifyPropertyChangedの実装例です。

何かが起こったときに他人に通知するパターンは、オブザーバーパターンと呼ばれます。コードを扱うイベントでは、これがたくさんあるはずです。あなたのクラスのユーザは、イベントが発生したときに呼び出されるコールバックを提供することによって通知にサインアップします(あなたの場合、いくつかのプロパティの値の変更)。このコード例では、PersonNameプロパティが変更されたときにクラスのユーザーに通知されます。

0

オブザーバーパターン:)。

イベントを使用する必要があります。

Public Property EstMenage() As Boolean 
     Get 
      Return _estMenage 
     End Get 
     Set(ByVal value As Boolean) 
      _estMenage = value 
      NotifyDataChanged() 
     End Set 
    End Property 


    Private Sub NotifyDataChanged(ByVal sender As Object, ByVal e As EventArgs) 
     RaiseEvent OnDataChanged(sender, e) 
    End Sub 

    Private Sub NotifyDataChanged() 
     NotifyDataChanged(me, new EventArgs()) 
    End Sub 

    <NonSerialized()> _ 
    Friend Event OnDataChanged(ByVal sender As Object, ByVal e As EventArgs) 

編集:では

setterあなたが判断し、いくつかのコードを持っている可能性がここにINotifyPropertyChanged

を見ているあなたが考慮すべきスニペット少しのコードでは、それはchangementに通知するための基本的なイベントを使用しています呼び出し元のメソッドが実際のクラス内にあるかどうかを判定します。呼び出し側がクラス内にある場合=>いけないそうで を上げる 、呼び出し側は=>あなたはStackTraceを取得し、プロパティを呼んでいるものを分析することができ

+0

このコードでは、内部コードまたは外部コードによってプロパティが変更された場合と、両方の場合に通知が行われます。 – user393679

+0

通知したくない場合は、プライベートメンバーに直接アクセスしてみませんか?それは私がすることです。内部的には、クラス内で作業しているため、プロパティを使用する必要はありません。私が見る他の解決策は、呼び出しを呼び出す方法を決定するためにリフレクションを使用することです。呼び出し元のメソッドが実際のクラスの一部でない場合は、イベントを発生させます。もしそうなら、上げないでください。しかし、これはもう少し高価になる – squelos

+0

私はそれが属する同じクラスにないプロパティを変更します。 – user393679

0

上げクラスではありません。 Environment.StackTraceを使用すると、関数を呼び出す情報を取得できます。

+0

私の場合は複雑すぎる – user393679

+0

あなたは問題の痛みを感じるのにずっと多くの時間を費やしていましたが、それは何らかの方法で実装するのに費用がかかります。 – MajesticRa

関連する問題