17 .net c# coding-style
我用这个:
delegate void OnSomethingHandler();
event OnSomethingHandler onSomething;
Run Code Online (Sandbox Code Playgroud)
这是一种可接受的方式吗?注意大小写
我通常将代理放在一个最能反映它们的命名空间中:
mynamespace.Def.SomethingLike
{
}
mynamespace.Def.SomethingElseLike
{
}
Run Code Online (Sandbox Code Playgroud)
我通常将它们放入使用它们的类中.
我注意到很多人在同一个类中定义委托和事件.这有多常见?
bdu*_*kes 21
事件总是指某个动作,无论是正在发生的动作还是已经发生的动作.因此,与方法一样,事件以动词命名,动词时序用于指示事件引发的时间.
√ DO事件的名称动词或动词短语.
例子包括
Clicked,Painting,DroppedDown,等等.√ 不要给事件的名称与之前和之后的一个概念,使用本时和过去时.
例如,被关闭的窗口前时引发close事件将被称为
Closing,和一个是窗后引发关闭将被称为Closed.X 请勿使用"之前"或"之后"前缀或后缀来指示事件前后事件.使用刚才描述的现在和过去时态.
√ DO与"事件处理"后缀名的事件处理程序(用作类型的事件的代表),如示于下面的例子:
Run Code Online (Sandbox Code Playgroud)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 EventHandler<SomethingEventArgs> Something;
Run Code Online (Sandbox Code Playgroud)
And*_*are 15
你拥有的一切看起来都非常标准 - 我唯一要改变的是事件名称Something而不是onSomething.按照微软的惯例,你最终会得到更像这样的东西:
delegate void SomethingHandler();
event SomethingHandler Something;
protected void OnSomething()
{
if (this.Something != null)
this.Something();
}
Run Code Online (Sandbox Code Playgroud)
作为一个很酷的技巧,你可以为你的Something事件添加一个空委托,这样你就不必在引发它之前检查事件是否为null:
delegate void SomethingHandler();
event SomethingHandler Something = delegate {};
protected void OnSomething()
{
this.Something();
}
Run Code Online (Sandbox Code Playgroud)