2013-12-11 77 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

謝謝。這似乎正在做我想要的。 –