我刚从 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/