Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#行动/代表式问题_C#_.net_Coding Style - Fatal编程技术网

C#行动/代表式问题

C#行动/代表式问题,c#,.net,coding-style,C#,.net,Coding Style,对于事件定义来说,什么是更好的样式: public event Action<object, double> OnNumberChanged; 第一种方法需要更少的键入,但委托方法为参数命名。当我输入这个时,我认为2号是赢家,但我可能错了 编辑:另一种(第三种)方法是赢家。请阅读下面的内容。如果不需要,请不要创建新类型。我认为这样更好: public event Action<object, double> OnNumberChanged; 更改编号的公共事件操作;

对于事件定义来说,什么是更好的样式:

public event Action<object, double> OnNumberChanged;
第一种方法需要更少的键入,但委托方法为参数命名。当我输入这个时,我认为2号是赢家,但我可能错了


编辑:另一种(第三种)方法是赢家。请阅读下面的内容。

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

public event Action<object, double> OnNumberChanged;
更改编号的公共事件操作;

Action
Func
委托族存在的原因就是为了达到这个目的,减少开发人员创建新委托类型的需要。

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

1或2。第三种选择是赢家

public event EventHandler<NumberChangedEventArgs> NumberChanged;
公共事件事件处理程序编号已更改;
您打破了在C#中开发的许多样式准则,例如使用不扩展EventArgs的事件args类型


是的,你可以这样做,因为编译器不在乎。但是,阅读您的代码的人将执行WTF

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

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

我有一门课:

public class ApplyClickedEventArgs : EventArgs  
{  
   ...
}
和一个处理程序:

void cpy_ApplyClicked(object sender, ApplyClickedEventArgs e)  
{  
   ...  
}  
宣言是:

public event EventHandler<ApplyClickedEventArgs> ApplyClicked;
公共事件事件处理程序ApplyClicked;

是的,你是对的。他们还建议您不要以“On”的名称启动事件,但您会将此名称保留给用于引发事件的受保护方法。如下文所述,为了清晰起见,最好使用EventHandler。为了实现它的价值,我在CodePlex上维护了一个库,它允许您将EventHandler的使用转换为Action,反之亦然。更多信息,请参见。@Brad Bruce,他指的不是答案顺序,而是与他最初的2个想法不同的第三种技巧。我重新编写了问题,并接受了稍微清晰一点的答案。+1作为风格指南参考。我只想补充一点,属性更改通知事件可能不需要自定义EventArgs,因为更改应该已经通过发送者的属性反映出来。
public event EventHandler<ApplyClickedEventArgs> ApplyClicked;