私がしようとしているのは、オブザーバパターンを実装することだけです。ObserverとDelegates、EventsのC#でのIObserverとIObservable
だから、私はこの解決策を考え出した:
私たちは、その主な仕事、それに加入しているすべての人に通知を送信することですPoliceHeadQuartersを持っています。 DSP、Inspector、SubInspectorクラスがPoliceHeadQuartersに登録されているとします。私は
public class HeadQuarters
{
public delegate void NewDelegate(object sender, EventArgs e);
public event EventHandler NewEvent;
public void RaiseANotification()
{
var handler = this.NewEvent;
if (handler != null)
{
handler(this, new EventArgs());
}
}
}
public class SubInspector
{
public void Listen(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Event Notification received by sender = {0} with eventArguments = {1}", sender, e.ToString()));
}
}
public class Inspector
{
public void Listen(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Event Notification received by sender = {0} with eventArguments = {1}", sender, e.ToString()));
}
}
を書いて、これは私がそう
var headQuarters = new HeadQuarters();
var SubInspector = new SubInspector();
var Inspector = new Inspector();
headQuarters.NewEvent += Inspector.Listen;
headQuarters.NewEvent += SubInspector.Listen;
headQuarters.RaiseANotification();
それを呼び出した方法ですイベントとデリゲートを使用して
が機能RaiseANotification()が呼び出されるたびに、インスペクターとSubInspector両方のクラスは、通知を得ます。
DotNet Framework 4,4.5は、IObserverとIObservableという新しい方法をサポートしているようです。
誰も私に、上記のシナリオでIObservableとIObserverパターンを使用して、簡単な簡単な例を教えてもらえますか?私はインターネットで利用可能な例があまりにも膨大になり、理解するのが困難であることを知るためにしか探せませんでした。
マイhinch:(おそらく、私はそれは間違っていると思います)事前に
class DSP : IObserver //since it observes the headquarters ?
class PoliceHeadQuarters: IObservable // since here's where we send the notifications ?
感謝。
EDIT:MSDNのドキュメントもIObservable @ IObservable vs Plain Events or Why Should I use IObservable?に対して間違っているとも言われました。ここで
http://msdn.microsoft.com/en-us/library/dd990377.aspx - いい例があります。コンパイルして実行しようとしないのはなぜですか? – Spook
@ Spook:問題は実際に私のシナリオとその例を関連付けることはできません。どんなスケルトンコード構造も私をさらに助けるはずです。 –
Microsoftの例は基本的なイベントアグリゲータを使用しているようです。より複雑ですが、最終的にはより柔軟なアプローチです。アグリゲータは、一連のIObserverを順番に呼び出すIObserverのタイプを繰り返します。私はこれが、代理人に対抗してインターフェイスベースのアプローチが使用される理由だと思います。 –