14

我在课堂上注册了一个活动,并且像往常一样,我很懒惰,只使用 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 的推荐!赞成“删除冗余代表创建”。该建议的结果是:

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

    protected FooBase()
    {
        MyValueChanged += HandleMyValueChanged;
    }

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

在什么情况下创建委托是多余的,什么时候创建委托合适?

谢谢。

4

2 回答 2

6

我认为重构!告诉你这条线

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

可以缩短,编译器将推断事件处理程序的创建和 TEventArgs 类型参数...

在什么情况下创建委托是多余的,什么时候创建委托合适?

在设计器生成的代码上...

于 2009-01-31T05:59:50.497 回答
6

对于那个很抱歉。当匿名方法被添加到 C# 时,我们只是没有时间在产品计划中生成更短的代码。

我总是编辑生成的代码以删除额外的语法。

于 2009-01-31T06:02:08.213 回答