附加到事件处理程序

时间:2010-07-02 09:25:49

标签: c#

  

可能重复:
  C#: Difference between ‘ += anEvent’ and ‘ += new EventHandler(anEvent)’

大家好,

我有两个事件处理程序。

在我的构造函数中,我将一个函数附加到事件处理程序,但是对于两个事件处理程序以不同的方式执行它。一个用新的Eventhandler,另一个用指向函数。他们似乎也一样吗?

首选方式是什么?为什么?

更新:已回答here

public partial class MyForm : Form
{
    public event EventHandler Button1Clicked;
    public event EventHandler Button2Clicked;

    public MyForm()
    {
        InitializeComponent();

        simpleButton1.Click += new EventHandler(simpleButton1_Click);
        simpleButton2.Click += Button2Click;
    }

    void simpleButton1_Click(object sender, EventArgs e)
    {
        if (Button1Clicked != null)
        {
            Button1Clicked.Invoke(sender, e);
        }
    }

    void Button2Click(object sender, EventArgs e)
    {
        if (Button2Clicked != null)
        {
            Button2Clicked.Invoke(sender, e);
        }
    }
}

3 个答案:

答案 0 :(得分:3)

C#2引入了方法组转换,这是您的第二个表单正在使用的内容。它在内部完全相同 - 在这两种情况下,它都会生成EventHandler的新实例。

我个人更喜欢第二种形式:它没有那么多的残余。它只是说出你感兴趣的东西。

(我没有发现确切的副本。尽管结束了这个问题,但仍然没有找到这个答案,因为它没有造成任何伤害。)

答案 1 :(得分:1)

是的,他们也这样做。 Resharper推荐信。

答案 2 :(得分:1)

附加事件处理程序的两种方式都是相同的。在最后一种情况下,框架(从2.0开始)可以推断出类型本身。