在c#中重用委托事件的正确方法

时间:2017-08-04 17:46:23

标签: c# .net

我正在尝试查看是否可以使用委托事件并重复使用它们,这样我就不必进行多次点击事件。现在我有以下......

namespace EventsWPF
{

public partial class MainWindow : Window
{
    public delegate void MyEvent(object sender, RoutedEventArgs e); 

    public MainWindow()
    {
        InitializeComponent();
        btn1.Click += MyEvent;
        btn2.Click += MyEvent;
    }


}

}

这是正确的方法吗?或者我是否以错误的方式思考这个问题?我知道你可以使用Lambda表达式作为事件处理程序。但是如果我有多个事件,那么当我可以重用一个委托时,我不想为每个处理程序创建多个Lamda表达式。

2 个答案:

答案 0 :(得分:1)

是的,如果两个按钮应该具有相同的逻辑运行;然后附加相同的处理程序完全正常。你不能通过附加delegate类型来做到这一点;你需要一个实际的方法(如@hoodaticus所述)。

如果是在WPF中:

然而,通常情况下,两个按钮不会做同样的事情,你无法逃避这一点。更常见的是,两个按钮执行相同的操作但具有不同的参数。不幸的是,WinForms风格的方法在这里会非常痛苦(你可以查看sender但是.... ewww)。

在这种情况下(实际上,在所有情况下)你真的想利用MVVM模式并为你的按钮设置命令(而不是点击处理程序)。然后,您可以使用CommandParameter将自定义数据块放入处理程序中。

答案 1 :(得分:1)

@Mapper public interface MyMapper { ShoppingCart map(Cart cart, @Context CycleAvoidingMappingContext context); ShoppingCartSample map(CartSample cart, @Context CycleAvoidingMappingContext context); } 在这里是不必要的,因为你没有创建自己的事件,只是订阅别人的事件。 MyEvent关键字声明方法签名和返回类型 - 它不创建实例或定义方法体。

以下是重用lambda表达式的方法:

delegate