关于命名事件的MSDN:
事件总是指某个动作,无论是正在发生的动作还是已经发生的动作.因此,与方法一样,事件以动词命名,动词时序用于指示事件引发的时间.
√ DO事件的名称动词或动词短语.
例子包括
Clicked
,Painting
,DroppedDown
,等等.√ 不要给事件的名称与之前和之后的一个概念,使用本时和过去时.
例如,被关闭的窗口前时引发close事件将被称为
Closing
,和一个是窗后引发关闭将被称为Closed
.X 请勿使用"之前"或"之后"前缀或后缀来指示事件前后事件.使用刚才描述的现在和过去时态.
√ DO与"事件处理"后缀名的事件处理程序(用作类型的事件的代表),如示于下面的例子:
public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);√ 不要使用命名的两个参数发送方和ê在事件处理程序.
sender参数表示引发事件的对象.sender参数通常是类型
object
,即使可以使用更具体的类型.√ DO名称事件参数类的"EventArgs的"后缀.
因此,事件应该用动词或动词短语命名.相反的OnSomething
,使用Something
,假设Something
实际上是一个动词,如Close
,Click
或ManagedPiplelineAbandoning
和ManagedPiplelineAbandoned
.
对于事件的委托应与被命名EventHandler
后缀,使CloseEventHandler
,ClickEventHandler
,ManagedPiplelineAbandoningHandler
,等.
对于与事件无关的代理,请使用名词,如EventProcessor
或ItemRetriever
,而该代表的实例是动词,如processEvent
或retrieveItem
.
委托引用的大小写应该是camel,除非引用不是私有的.但是我想不出你有非私人代表字段的情况.
但是,由于建议使用传统的事件处理程序签名(即object sender, EventArgs e)
),因此应使用通用事件处理程序而不是定义自己的事件处理程序.也就是说,您的事件将被定义为:
event EventHandlerSomething;
你拥有的一切看起来都非常标准 - 我唯一要改变的是事件名称Something
而不是onSomething
.按照微软的惯例,你最终会得到更像这样的东西:
delegate void SomethingHandler(); event SomethingHandler Something; protected void OnSomething() { if (this.Something != null) this.Something(); }
作为一个很酷的技巧,你可以为你的Something
事件添加一个空委托,这样你就不必在引发它之前检查事件是否为null:
delegate void SomethingHandler(); event SomethingHandler Something = delegate {}; protected void OnSomething() { this.Something(); }