为什么在添加按钮的Click事件时会创建一个新的RoutedEventHandler?

时间:2012-10-09 22:18:34

标签: c# visual-studio intellisense

有什么区别:

this.btnConnect.Click += btnConnect_Click;

this.btnConnect.Click += new RoutedEventHandler(btnConnect_Click);

它似乎以相同的方式工作,但Visual Studio IntelliSense插入第二个示例,我很好奇为什么。

我最初的猜测是,使用IntelliSense版本会使每个按钮调用自己的RoutedEventHandler实例,使其具有线程安全性? 并且使用第一个示例,然后每个按钮将调用该方法的相同实例,并且他们可能会互相踩到脚。

2 个答案:

答案 0 :(得分:3)

同样的事情,第一个只是一个语法糖,即编译器为两者生成相同的IL字节码 - 总是创建一个委托实例。

IIRC,第一个版本的C#不允许第一个语法,它是在C#2.0中引入的。

答案 1 :(得分:0)

您也可以使用Lambda来创建RoutedEventHandler:

        new RoutedEventHandler(
            (sendItem, args) =>
            {
                //things you want to do
                IsTopMost = !IsTopMost;
                this.Topmost = IsTopMost;
                ((MenuItem) sendItem).Header = menuWords[0, ++menuClickCount[0]%2];
            })