[英]Java Observer / Observable equivalent in C#?
在使用等效於Java的C#之后,我要在IObservable
和IObserver
中IObserver
一點。 但是我不完全確定如何正確使用它。 我已經在Google上進行了搜索,但是結果要么針對特定問題,要么過於復雜。
這是我非常基本的Java代碼:
public class SomeController extends Observable{
public void doSomething()
{
//dostuff
setChanged();
notifyObservers();
}
}
public class SomeView implements Observer{
private SomeController controller;
public SomeView (SomeController ctrl)
{
this.controller= ctrl;
ctrl.addObserver(this);
}
public void update (Observable o,Object arg)
{
if (o==controller)
System.out.println("Update detected");
}
}
對,那么我該如何在C#中做完全相同的事情?
C#以事件的形式內置了對觀察者模式的支持。 我認為這就是您要尋找的。
public delegate void UpdatedEventHandler(object sender, EventArgs e);
public class SomeController {
public event UpdatedEventHandler Updated;
protected virtual void OnUpdated(EventArgs e)
{
if (Updated != null)
{
this.Updated(this, e);
}
}
public void DoSomething()
{
// Do stuff
this.OnUpdated(new EventArgs());
}
}
public class SomeView implements Observer{
private SomeController controller;
public SomeView(SomeController ctrl)
{
this.controller = ctrl;
ctrl.Changed += this.OnControllerChanged;
}
private void OnControllerChanged(object sender, EventArgs e)
{
if (sender == this.controller)
{
Console.WriteLine("Update detected");
}
}
}
在C#中, IObservable
和IObserver
主要作為Reactive Extensions(Rx)的一部分出現,以表示異步可觀察序列和事件偵聽器。
C#有一個委托事件。
查看http://blog.monstuff.com/archives/000040.html
但是由於Observable只是一個接口,因此您可以根據需要制作java-way的副本。
您在談論INotifyPropertyChanged實現嗎?
這是一個示例: INotifyPropertyChanged示例
在這種情況下,您可能應該使用MVVM模式而不是MVC: Mvvm post
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.