Избегаете большого количества пользовательских EventArgs? - PullRequest
4 голосов
/ 12 мая 2010

В библиотеке классов, которую я реорганизую, есть большое количество событий (более 50), каждое из которых имеет свой делегат, хотя многие из них имеют одинаковые аргументы. Я начал переключать их все, чтобы использовать EventHandler и пользовательские EventArgs, но это оказывается утомительным и отнимает много времени.

Есть ли более простой способ справиться с такой ситуацией, когда у вас огромное количество событий?

Ответы [ 2 ]

6 голосов
/ 12 мая 2010

Вам определенно не нужен ваш собственный тип делегата - вы можете использовать EventHandler<TEventArgs>, где TEventArgs - ваш конкретный EventArgs подкласс.

Восстановление большого беспорядка всегда отнимает много времени и раздражает. Если вы перейдете к использованию групповых преобразований методов, это может упростить в будущем:

// This...
foo.SomeEvent += new MyCustomEventHandler(SomeMethod);

// becomes this..
foo.SomeEvent += SomeMethod;

Затем, если тип SomeEvent изменится, вы можете изменить SomeMethod, и подписка будет работать, без необходимости повторного изменения.

Нужно ли вам несколько разных EventArgs подтипов - это другой вопрос, и невозможно сказать, не зная о вашей конкретной ситуации. Если вам нужно передать большое количество информации, это может иметь смысл.

2 голосов
/ 12 мая 2010

Я использую шаблонный класс аргументов событий, как показано ниже, чтобы избежать необходимости создавать большое количество пользовательских классов аргументов событий.

public class MessageEventArgs<T> : EventArgs
{
    public MessageEventArgs(T message)
    {
        Message = message;
    }

    public T Message
    {
        get;
        private set;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...