在java中,很多类支持监听器回调,我认为它是观察者模式。但是n c#,我找不到,为什么?
答案 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#中的回调,你有Delegates,Events和Lambda Expressions取代充当一流函数的Java侦听器,并允许更高质量的编码模式。最近,Linq Reactive Extensions已经推出,为开发人员提供了更多工具。