2009-01-31 99 views
13

我正在注册我的课程中的一个活动,并且按照惯例,我很懒,只使用内置于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一族的事件处理程序我,但后来我从重构收到的建议! Pro“删除冗余代表创建”。建议结果如下:

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

    protected FooBase() 
    { 
     MyValueChanged += HandleMyValueChanged; 
    } 

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

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

谢谢。

回答

4

我认为重构!告诉你,行

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

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

下什么情况下委托创作 多余的,当是 委托创建是否合适?

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

5

对此深感抱歉。当匿名方法添加到C#时,我们没有时间在产品时间表中生成较短的代码。

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