2010-07-23 39 views
19

从我读过的内容我不确定是否有事件和处理程序的命名约定正确。 (这里似乎有一些相互矛盾的建议)。正确地命名C#事件和处理程序

在下面的两个类中,任何人都可以告诉我是否拥有事件的命名权,引发事件的方法和处理事件的方法?

public class Car 
{ 
// is event named correctly? 
public event EventHandler<EventArgs> OnSomethingHasHappened; 

private void MoveForward() 
{ 
    RaiseSomethingHasHappened(); 
} 

// is the named correctly 
private void RaiseSomethingHasHappened() 
{ 
    if(OnSomethingHasHappened != null) 
    { 
    OnSomethingHasHappened(this, new EventArgs()); 
    } 
} 
} 

和用户等级:

public class Subscriber() 
{ 
public Subscriber() 
{ 
    Car car = new Car(); 
    car.OnSomethingHasHappened += Car_SomethingHasHappened(); 
} 

// is this named correctly? 
private void Car_SomethingHasHappened(object sender, EventArgs e) 
{ 
    // do stuff 
} 
} 

提前感谢!

+0

偏dulicate:[适当命名-惯例换一个净代表类型](http://stackoverflow.com/questions/2346065/proper-naming-convention-for-a-net-delegate-类型) – slugster 2010-07-23 10:10:24

+0

我投票结束这个问题作为题外话题,因为它是关于代码审查,而不是一个可重现的编程问题。 – 2016-08-09 02:32:57

+0

@Cᴏʀʏ虽然这个问题,正如它目前所写,这将是[codereview.se]的主题。诸如“SomethingHappened”之类的占位符使得它太过于虚构。 – 2016-08-09 03:05:36

回答

1

我个人看看微软如何命名他们的事件以及他们如何命名他们的处理程序。

class Form{ 
    public event EventHandler<EventArgs> MouseMove; 
    public virtual void OnMouseMove() 
    { 
     if(MouseMove != null) 
     { 
      MouseMove(this, new EventArgs()); 
     } 
    } 
} 

class Application{ 
    public Application() 
    { 
     Form form = new Form(); 
     form.MouseMove += //Hook your own Method 
    } 
} 
5

我倾向于反其道而行之:

public event EventHandler SomethingHappened; 

private void OnSomethingHappened() 
{ 
    SomethingHappened(); 
} 

然后:

private void Car_SomethingHappened() 
{ 

} 

不干净的代码,但该命名是我如何做到这一点。如果没有一个明确的局部变量名或它没有任何意义,我后缀名以“处理程序”:

private void SomethingHappenedHandler() {} 
20

几乎

触发事件的方法 - On<When>Event(从RaiseSomethingHasHappened

OnBeforeOpenOnClosingOnSomethigHasHappened

事件<When>Event(从OnSomethingHasHappened

BeforeOpenClosingSomethingHasHappened

处理程序<The Instance or meaningful Name><_><Event>(从Car_SomethingHasHappened

Form_BeforeOpenWindow_ClosingCar_SomethingHasHappened - >完美

+0

1然而,在一些实施例中的MS的专用事件烧成法是NotifyEventName(例如NotifyProperyChanged)。 – 2010-07-23 10:09:03

1

我想说的命名规则是好的,但我错过在你身上发生了什么?

,所以我会更专注的事件本身(如MovedForward)的名称,或者如果你需要它更广义的,你应该提供什么改变(如在BindingListListChanged)EventArgs的内一些额外的信息。

6

那么,第一点是您定义自己的命名约定,并且没有“错误”的方式来执行它(只要它是一致的)。

话虽如此,如果您与其他人分享您的代码,Microsoft标准是很好的。

通常情况下,你会活动名称为:

public class Car 
{ 
// is event named correctly? 
public event EventHandler<EventArgs> SomethingHasHappened; 

private void MoveForward() 
{ 
    OnSomethingHasHappened(); 
} 

// is the named correctly 
protected virtual void OnSomethingHasHappened() 
{ 
    EventHandler<EventArgs> locum = SomethingHasHappened; 
    if(locum!= null) 
    { 
    locum(this, new EventArgs()); 
    } 
} 
} 

注意该事件没有“开”前缀标题,以及事件触发方法与“论”字头命名。 事件触发方法也protected virtual使派生类可以覆盖改变/添加到行为,以及使用它的时候需要触发事件本身。