在使用 C# 中的 IObservable
和 IObserver
后,我使用了它的 Java 等效项。但是我并不完全确定如何正确使用它。我已经在 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# 以事件的形式内置支持观察者模式。我想这就是您正在寻找的。p>
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# - C# 中的 Java Observer/Observable 等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517661/