2

有什么区别:

this.btnConnect.Click += btnConnect_Click;

和:

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

无论哪种方式似乎都一样,但是 Visual Studio IntelliSense 插入了第二个示例,我很好奇为什么。

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

4

2 回答 2

3

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

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

于 2012-10-09T22:21:18.090 回答
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];
            })
于 2017-02-20T03:35:04.907 回答