为什么c#中没有监听器?

Ada*_*Lee -2 c# java

在java中,很多类支持监听器回调,我认为它是观察者模式.但是nc#,我找不到,为什么?

Guv*_*nte 5

C#以Delegate的形式支持第一类函数.

请注意,在您的情况下,事件是侦听器样式范例的基础.

例如,表格:

public class Form1
[--snip--]
    public event EventHandler Closed;
    public event EventHandler Clicked;
Run Code Online (Sandbox Code Playgroud)

另一个想要修改该表单的类:

public class Other
{
    public static void CloseHandler(object sender, EventArgs e)
    {
        Console.WriteLine("Closed");
    }

    public static void Main(string[] args)
    {
        Form1 form = new Form1();
        form.OnClose += CloseHandler;
        form.OnClick += (s,e) => Console.WriteLine("Click");
    }
}
Run Code Online (Sandbox Code Playgroud)

当窗体关闭时,这(禁止语法错误)应该打印到控制台"关闭".单击表单时单击"单击".请注意,我排除了执行调用以保持简单的代码.

另请注意,C#中的事件通常被命名为用于中断事件的现在时(在操作之前发生)和用于事件事件的过去时(在操作之后立即发生).您通常还有一个OnClosed或类似的允许继承类来覆盖功能而不附加事件,更不用说允许中心位置来避免null问题.


Lee*_*Lee 5

C#用允许客户端注册给定类型的回调的事件替换了显式Listener类型.最近,Reactive Extensions库实现了观察者模式,允许使用Linq转换,过滤等事件.