Event Subscription

When subscribing to events in .NET, I need to create a new delegate instance, for example

toolbarControl1.OnUploadEventHandler += 
    new ToolbarControl.UploadEventHandler(toolbarControl1_OnUpload);

Or is it better to do the following?

toolbarControl1.OnUploadEventHandler += toolbarControl1_OnUpload;

Thanks in advance.

+3
source share
5 answers

The second takes less encoding, and both mean the same thing.

You might want to use the generic version of EventHandler - EventHandler<TEventArgs>. You will save on the announcement of all these delegates.

You can also use lambda expressions, i.e.

toolbarControl1.OnUploadEventHandler += 
    (sender, args) => { /* Your code goes here */ };
+9
source

You can do both, so your preference.

You can also do such things for very simple handlers to save a delegate function entry:

toolbarControl1.OnUploadEventHandler += (s, e) => uploadCount +=1;
+2
source

:

using System;
class Program
{
    void SomeMethod(object sender, EventArgs e) { }
    event EventHandler SomeEvent;
    static void Main(string[] args)
    {
        var prog = new Program();

        // Demonstrate that they are equivalent
        prog.SomeEvent += new EventHandler(prog.SomeMethod);
        prog.SomeEvent -= prog.SomeMethod; // Sugar for new EventHandler(prog.SomeMethod)
        Console.WriteLine("Number of SomeEvent subscribers is {0}", (prog.SomeEvent != null ? prog.SomeEvent.GetInvocationList() : new Delegate[0]).Length);

        // Why are they equivalent?
        var d1 = new EventHandler(prog.SomeMethod);
        var d2 = new EventHandler(prog.SomeMethod);
        Console.WriteLine("Delegates are reference equal {0}", Object.ReferenceEquals(d1, d2));
        Console.WriteLine("Delegates are equivalent {0}", d1 == d2);
    }
}
+1

. .

0

, , .

0

All Articles