2010-07-23 53 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使派生類可以覆蓋改變/添加到行爲,以及使用它的時候需要觸發事件本身。