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

时间:2013-01-14 23:21:59

标签: c# java

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

4 个答案:

答案 0 :(得分:5)

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

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

例如,表格:

public class Form1
[--snip--]
    public event EventHandler Closed;
    public event EventHandler Clicked;

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

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");
    }
}

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

C#使用委托和事件以及lambda表达式,这些表达式允许非常出色的模式。

答案 3 :(得分:3)

嗯...要列出C#中的回调,你有DelegatesEventsLambda Expressions取代充当一流函数的Java侦听器,并允许更高质量的编码模式。最近,Linq Reactive Extensions已经推出,为开发人员提供了更多工具。