-3

在java中,很多类都支持监听回调,我认为是观察者模式。但是 nc#,我没有找到,为什么?

4

4 回答 4

5

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

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

例如,一个表格:

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

这(除非语法错误)应该在表单关闭时将“Closed”打印到控制台。并在单击表单时“单击”。请注意,我排除了执行调用以使其简单的代码。

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

于 2013-01-14T23:23:22.350 回答
5

C# 将显式Listener类型替换为允许客户端注册给定类型的回调的事件。最近,响应式扩展库实现了观察者模式,允许使用 Linq 转换、过滤等事件。

于 2013-01-14T23:24:59.110 回答
4

C# 使用委托和事件以及 lambda 表达式,它们允许非常优越的模式。

于 2013-01-14T23:23:44.773 回答
3

好吧...要列出 C# 中的回调,您可以使用DelegatesEventsLambda 表达式代替 Java 侦听器,充当一流的函数并允许更好的编码模式质量。最近,引入了 Linq Reactive Extensions,为开发人员提供了更多工具。

于 2013-01-14T23:24:39.563 回答