c# - WinForms Designer 自动创建的事件处理程序

标签 c# vb.net event-handling

我刚从 VB.NET 转到 C#。在 VB 中,要将事件处理程序连接到 Sub,我们使用 Handles 子句。

看起来,这在 C# 中不存在。

在创建一个带有按钮的简单应用程序后,我意识到 Window Forms Designer 自动为我的 button1_Click 函数创建了一个事件处理程序(在我双击它之后),在 Form1.Designer.cs 中使用以下代码:

this.button1.Click += new System.EventHandler(this.button1_Click);

但是在 VB 中,WinForms Designer 在我的类中的函数头中创建了 Handles 子句。

因此,C# 在设计器文件中创建默认的 EventHandler,而 VB 在控件所在的主类中创建。

这是正确的吗?我在这里遗漏了什么吗?

最佳答案

您是对的,因为在 C# 中没有类似于 VB.NET handles 子句(或相应的 WithEvents 变量装饰器)。这些只存在于 VB.NET 中,作为经典 VB 的遗留物,并且它们在使用中有开销(生成的 IL 实际上必须监视设置变量的所有位置,以便分离和附加 handles< 的所有函数 那个事件)。

如果您检查 VB.NET 窗体或控件的 IL,您实际上会发现为每个 WithEvents 变量 创建了一个属性,并且setter 负责从旧值(假设它非空)中删除所有实际处理程序并将它们附加到新值(假设它非空)。

VB.NET 中 C# 事件处理的模拟是 AddHandler 语句。

关于c# - WinForms Designer 自动创建的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3070326/

相关文章:

c# - 图像源和缓存

Vb.net 到 golang AES

asp.net - 如何使用 EF 在开发数据库和实时数据库之间切换?

wpf - 如何将打印到标签上的文本设为粗体、斜体或下划线?

java - 什么时候注册监听器?

javascript - 如何将带有参数的事件处理程序添加到 Javascript 中的元素数组?

c# - 如何限制方法的允许调用者?

c# - 如何打开带附件的默认电子邮件客户端

javascript - 事件处理问题

c# - 发布 Moq'ing HttpResponseMessage