簡體   English   中英

Java Observer / C#中的等效Observable?

[英]Java Observer / Observable equivalent in C#?

在使用等效於Java的C#之后,我要在IObservableIObserverIObserver一點。 但是我不完全確定如何正確使用它。 我已經在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#中, IObservableIObserver主要作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM