两者之间有什么区别:
this.btnConnect.Click += btnConnect_Click;
和:
this.btnConnect.Click += new RoutedEventHandler(btnConnect_Click);
无论哪种方式,它似乎都是一样的,但是Visual Studio IntelliSense插入了第二个示例,我很好奇为什么。
我最初的猜测是,使用 IntelliSense 版本可以使每个按钮调用自己的RoutedEventHandler
实例,使其线程安全?使用第一个示例,然后每个按钮将调用该方法的相同实例,它们可能会踩到对方的脚。
这是一回事,第一个只是一个语法糖,即编译器为两者生成相同的 IL 字节码 - 总是创建一个委托实例。
IIRC,C#的第一个版本不允许第一个语法,它是在C#2.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];
})