c# - C# 中的 Java Observer/Observable 等效项?

标签 c# java

在使用 C# 中的 IObservableIObserver 后,我使用了它的 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# 以事件的形式内置支持观察者模式。我想这就是您正在寻找的。

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# - C# 中的 Java Observer/Observable 等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517661/

相关文章:

C# 4.0 动态特性

java - HttpServletRequest.getRemoteAddr() 对于 Tomcat 8 Java 8 为空

java - 什么是 NullPointerException,我该如何解决?

java - JDBC 日期到 SQL 日期

c# - ASP.NET Identity - 多提供商自定义实现

c# - 用于准确检测 "071-XXXXXXX"的正则表达式,其中 X 是数字

c# - LINQ 和 C# : How to add a field, 未映射到表列

c# - 为特定请求禁用 ASP.NET session 刷新

java - 游戏框架 2.2 java : how to set language (i18n) from subdomain

java - 整数除法 : Why is the result of 1/3 == 0?