Что представляет собой "избыточное создание делегатов"?

Я регистрировался на событие в своем классе и, как обычно, был ленив и просто использовал функцию автозаполнения, встроенную в Visual Studio 2008 Pro, которая автоматически создает создание делегата и связанный с ним метод.

public abstract class FooBase
{
    protected event EventHandler<MyValueChangedArgs> MyValueChanged;

    protected FooBase()
    {
        MyValueChanged +=
            new EventHandler<MyValueChangedArgs>(HandleMyValueChanged);
    }

    private void HandleMyValueChanged(object sender, MyValueChangedArgs e)
    {
        // Some handling logic
    }
}

Обычно я не думаю дважды, когда Visual Studio передает мне обработчик событий, но затем я получил рекомендацию от Refactor! Pro для "Удалить избыточное создание делегатов". Рекомендация приводит к:

public abstract class FooBase
{
    protected event EventHandler<MyValueChangedArgs> MyValueChanged;

    protected FooBase()
    {
        MyValueChanged += HandleMyValueChanged;
    }

    private void HandleMyValueChanged(object sender, MyValueChangedArgs e)
    {
        // Some handling logic
    }
}

В каких обстоятельствах избыточность делегирования создается и когда создается делегирование?

Спасибо.

Ответы

Ответ 1

Я думаю, что Refactor! сообщает, что строка

MyValueChanged += new EventHandler<MyValueChangedArgs>(HandleMyValueChanged);

Может быть сокращен, и компилятор выведет создание обработчика события и аргумент типа TEventArgs...

При каких обстоятельствах делегат создание избыточно и когда создание делегата?

О сгенерированном дизайном коде...

Ответ 2

Извините. У нас просто не было времени в графике продукта, чтобы генерировать более короткий код, когда анонимные методы были добавлены в С#.

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