Подписка на события - PullRequest
       16

Подписка на события

3 голосов
/ 14 марта 2011

При подписке на события в .NET нужно создавать новый экземпляр делегата, например

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

Или лучше сделать следующее?

toolbarControl1.OnUploadEventHandler += toolbarControl1_OnUpload;

Заранее спасибо.

Ответы [ 5 ]

9 голосов
/ 14 марта 2011

Второй занимает меньше кода и оба означают одно и то же.

Возможно, вы захотите использовать универсальную версию EventHandler - EventHandler<TEventArgs>.Вы сэкономите на объявлении всех этих делегатов.

Вы также можете использовать лямбда-выражения, т. Е.

toolbarControl1.OnUploadEventHandler += 
    (sender, args) => { /* Your code goes here */ };
2 голосов
/ 14 марта 2011

Вы можете сделать и то и другое, так что ваши предпочтения.

Вы также можете делать такие вещи для очень простых обработчиков, чтобы сохранить написание функции делегата:

toolbarControl1.OnUploadEventHandler += (s, e) => uploadCount +=1;
1 голос
/ 14 марта 2011

Код говорит сам за себя:

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);
    }
}
0 голосов
/ 14 марта 2011

Они эквивалентны, если вам не нужно сохранять ссылку на делегата, чтобы отписаться.

0 голосов
/ 14 марта 2011

Они эквивалентны.Второй только обеспечивает лучшую читаемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...