命名,声明和定义委托和事件约定

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

关于命名事件的MSDN:

事件总是指某个动作,无论是正在发生的动作还是已经发生的动作.因此,与方法一样,事件以动词命名,动词时序用于指示事件引发的时间.

DO事件的名称动词或动词短语.

例子包括Clicked,Painting,DroppedDown,等等.

不要给事件的名称与之前和之后的一个概念,使用本时和过去时.

例如,被关闭的窗口前时引发close事件将被称为Closing,和一个是窗后引发关闭将被称为Closed.

X 请勿使用"之前"或"之后"前缀或后缀来指示事件前后事件.使用刚才描述的现在和过去时态.

DO与"事件处理"后缀名的事件处理程序(用作类型的事件的代表),如示于下面的例子:

public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);
Run Code Online (Sandbox Code Playgroud)

不要使用命名的两个参数发送方ê在事件处理程序.

sender参数表示引发事件的对象.sender参数通常是类型object,即使可以使用更具体的类型.

DO名称事件参数类的"EventArgs的"后缀.

因此,事件应该用动词或动词短语命名.相反的OnSomething,使用Something,假设Something实际上是一个动词,如Close,ClickManagedPiplelineAbandoningManagedPiplelineAbandoned.

对于事件的委托应与被命名EventHandler后缀,使CloseEventHandler,ClickEventHandler,ManagedPiplelineAbandoningHandler,等.

对于与事件无关的代理,请使用名词,如EventProcessorItemRetriever,而该代表的实例是动词,如processEventretrieveItem.

委托引用的大小写应该是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)

  • 我会考虑将SomethingEventArgs包含在您的样本中,因为这是约定的一部分.此外,EventHandler <SomethingEventArgs>更常见于2.0后 (7认同)