2012-05-10 141 views

回答

7

如果賽事不應該提供任何額外的信息(foo是您的活動名稱):

public event EventHandler Foo; 

,提高這樣說:如果你需要傳遞

protected virtual void OnFoo() 
{ 
    if (Foo != null) 
     Foo(this, EventArgs.Empty); 
} 

向事件處理程序提供一些附加信息,然後通過繼承自EvenArgs類創建自定義參數類

public class FooEventArgs : EventArgs 
{ 
    public string Message { get; private set; } 

    public FooEventArgs(string message) 
    { 
     Message = message; 
    } 
} 

申報事件是這樣的:

public event EventHandler<FooEventArgs> Foo; 

,提高這樣說:

protected virtual void OnFoo(string message) 
{ 
    if (Foo != null) 
     Foo(this, new FooEventArgs(message)); 
} 

它很好的做法,建立由地方聲明事件類的後裔引發事件的保護方法。也很好的做法,使用事件命名約定:

  • 加後綴-ing到事件名稱之前 發生了一件事,其引發的事件(通常你可以取消這樣的事件)(例如驗證)
  • 加後綴-ed到事件名稱對於事情發生之後引發的事件(如點擊)

由於托爾斯滕表示,好的做法創造virtual方法引發事件。它不僅可以從後代引發事件,還可以禁用事件提升,或在事件發生之前/之後添加一些行爲。

+1

另外,最好通過名爲'OnXXX'的'protected virtual void'方法來提升事件,其中'XXX'是事件的名稱。在上面的示例中:'protected virtual void OnFoo(...)'。 –

+0

@ThorstenDittmar到底!在我的例子中,我的糟糕 - 被遺忘的'virtual'關鍵字 –

0
public event EventHandler<EventArgs> YourEvent; 
相關問題