RHa*_*uda 2 c# vb.net event-handling
我刚从VB.NET转到C#.在VB中,要将事件处理程序连接到Sub,我们使用Handles子句.
从它看起来,这在C#中不存在.
使用按钮创建一个简单的应用程序后,我意识到Window Forms Designer自动为我的button1_Click函数创建了一个EventHandler(在我双击它之后),在Form1.Designer.cs中使用以下代码:
this.button1.Click += new System.EventHandler(this.button1_Click);
Run Code Online (Sandbox Code Playgroud)
但是在VB中,WinForms Designer在我的类中的函数头中创建了Handles子句.
因此,C#在设计器文件中创建默认的EventHandler,而VB在控件所在的主类中创建.
它是否正确?我在这里错过了什么吗?
你是对的,因为在C#中没有类似于VB.NET handles子句(或相应的WithEvents变量装饰器).这些仅存在于VB.NET中作为来自经典VB的延迟,并且它们在使用中具有开销(生成的IL实际上必须监视设置变量的所有地方以便分离和附加handles该事件的所有功能).
如果检查IL的VB.NET表单或控件,您实际上会发现为每个WithEvents变量创建了一个属性,并且setter负责从旧值中删除所有实际处理程序(假设它不是-null)并将它们附加到新值(假设它是非null).
在VB.NET中C#事件处理的模拟是AddHandler声明.