2013-12-11 75 views
0

我使用C#中的IObservableIObserver,在使用它的Java等价物后,我稍稍尝试了一下。不过,我不完全确定如何正确使用它。我已经谷歌搜索了这个,但结果要么太具体问题,要么太不必要地复杂。C#中的Java Observer/Observable等价物?

这是我非常基本的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#中非常完全一样的东西?

回答

2

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#,IObservableIObserver主要显示为Reactive Extensions (Rx)一部分,以表示异步观察序列和事件侦听器。

+0

谢谢。这似乎正在做我想要的。 –