C#动作/代表风格问题

时间:2009-07-13 16:45:35

标签: c# .net coding-style

什么被认为是更好的事件定义样式:

public event Action<object, double> OnNumberChanged;

public delegate void DNumberChanged(object sender, double number);
public event DNumberChanged OnNumberChanged;

第一个输入较少,但是委托者给出了参数的名称。当我打字时,我认为2号是赢家,但我可能是错的。

编辑:不同的(第三种)方法是赢家。请阅读以下内容。

5 个答案:

答案 0 :(得分:16)

无论是1还是2.第三种选择是赢家

public event EventHandler<NumberChangedEventArgs> NumberChanged;

您打破了许多用于在C#中进行开发的样式指南,例如使用不扩展EventArgs的事件args的类型。

是的,您可以这样做,因为编译器不关心。但是,阅读代码的人会做WTF。

答案 1 :(得分:11)

如果您不需要,请不要创建新类型。我认为这更好:

public event Action<object, double> OnNumberChanged;

存在ActionFunc委托系列的原因是为了达到这个目的,并减少开发人员创建新委托类型的需要。

答案 2 :(得分:2)

通常我坚持使用EventArgs派生类作为参数。它使代码更加一致。

我有一个班级:

public class ApplyClickedEventArgs : EventArgs  
{  
   ...
}

和一个处理程序:

void cpy_ApplyClicked(object sender, ApplyClickedEventArgs e)  
{  
   ...  
}  

声明是:

public event EventHandler<ApplyClickedEventArgs> ApplyClicked;

答案 3 :(得分:1)

与所有关于编码风格的问题一样。选择您喜欢的或您的团队喜欢的,并在整个项目中保持一致。只要每个需要的人都能有效地阅读它,你就可以了。

答案 4 :(得分:0)

我认为选项1更好,如果我选择,但IIRC,事件的官方指南声明您的第二个参数必须是名为XxxEventArgs的类,并且应该EventArgs在其继承链中。