2012-05-10 150 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; 
相关问题