I just moved from VB.NET to C#. In VB, to connect an Event Handler to a Sub we use the Handles clause.
From what it seems, this do not exist in C#.
After creating a simple application with a button I realize that Window Forms Designer automatically created an EventHandler to my button1_Click function (after I double clicked it), in Form1.Designer.cs with this code:
this.button1.Click += new System.EventHandler(this.button1_Click);
But in VB, the WinForms Designer creates the Handles clause in my class, in the function header.
So, C# creates the default EventHandler in designer file, while VB creates in main class where control resides.
Is this correct? Am I missing something here?
You’re right in that there is no analog to the VB.NET
handlesclause (or the correspondingWithEventsvariable decorator) in C#. These only exist in VB.NET as holdovers from classic VB, and they have overhead in their use (the generated IL actually has to monitor everywhere that the variable is set in order to detach and attach all of the functions thathandlesthat event).If you examine the IL for a VB.NET form or control, you’ll actually find that there is a property created for every single
WithEventsvariable, and the setter takes care of removing all of the actual handlers from the old value (assuming it’s non-null) and attaching them to the new value (assuming it’s non-null).The analog for C#’s event handling in VB.NET is the
AddHandlerstatement.