为什么要在添加到按钮的 Click 事件时创建新的路由事件处理程序?



两者之间有什么区别:

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];
            })

最新更新