应该事件,没有参数界定其自己的定义定引或者简单使用的系统。定引,而不是?

StackOverflow https://stackoverflow.com/questions/1318543

  •  19-09-2019
  •  | 
  •  

我有一个事件,是当前定义与任何情况的论点。这就是,定引发送被定引.空。

在这种情况下,这是最简单的宣布我的事件的处理程序:

EventHandler<System.EventArgs> MyCustomEvent;

我不计划增加任何事件的论点这一事件,但这是可能的,任何代码,可能需要在未来改变。

因此,我倾向于具有我所有的事件总是创建一个空的事件args类型,从inheretis System.EventArgs, 即使是没有事件args目前的需要。事情是这样的:

public class MyCustomEventArgs : EventArgs
{
}

然后我的活动定义成为如下:

EventHandler<MyCustomEventArgs> MyCustomEvent;

所以我的问题是这个:它是更好地定义我自己 MyCustomEventArgs, 甚至如果不添加任何东西超越继承 System.EventArgs, ,这样事件的参数可能会增加在将来的更容易吗?还是更明确地定义我的事件,为返回 System.EventArgs, ,因此,它是更明确的用户,有没有额外的事件args?

我倾向于创建自定义事件的参数对于我所有的事件,即使事件的论点是空的。但我想知道,如果其他人认为,使其更明确的用户,该事件的论点是空会更好吗?

多,在此先感谢,

Mike

有帮助吗?

解决方案

框架的设计准则 通过布拉德布拉姆斯和克日什托夫*Cwalina:

考虑使用的一个子类 EventArgs 作为事件参数,除非是绝对肯定的事件将永远不需要携带任何数据,然后处理事件的方法,在这种情况下可以使用 EventArgs 类型。

如果你的船API使用 EventArgs 直接的,你永远不可能添加的任何数据进行与所述事件不断的兼容性。如果您使用的一个子类,即使最初完全是空的,你将能够增加特性的子类需要的时候。

就个人而言,我认为这涉及到的兼容性问题。如果你正在做一个类库能够被其他人,然后我会用一个子类。如果你只是使用的事件在你自己的代码,则(作为阿尔弗雷德有说),YAGNI适用。这将是一个重大更改的时候你改变 EventArgs 你自己来阶级,但因为它只会打破自己的代码这是不太多的一个问题。

其他提示

YAGNI

我建议坚持EventArgs的,并且只使用另一回事,当你真正成为需要它。


更新:

由于 adrianbanks 指出,如果你的代码是要由其他代码,是不是你的控制之下(即代码,你无法自己编译)或者重新编译代码的消费者将是一个麻烦,那么你应该使用事件处理程序

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top