需要帮助了解C#中的事件

raf*_*ael 4 c# events

我是C#的初学者,很难理解C#中的事件.我读过的这本书(插图C#2008)给出了一个例子,我需要问一些事情,所以我将在这里通过代码并指出我不理解的事情.

public class MyTimerClass
{
   public event EventHandler Elapsed;
   private void OnOneSecond(object source, EventArgs args)  
   {
     if (Elapsed != null)                
     Elapsed(source, args);
   }
}

class ClassA
{
    public void TimerHandlerA(object obj, EventArgs e) // Event handler
    {
        Console.WriteLine("Class A handler called");
    }
}

class ClassB
{
    public static void TimerHandlerB(object obj, EventArgs e) // Static
    {
        Console.WriteLine("Class B handler called");
    }
}

class Program
{
     static void Main( )
     {
         ClassA ca = new ClassA(); // Create the class object.
         MyTimerClass mc = new MyTimerClass(); // Create the timer object.
         mc.Elapsed += ca.TimerHandlerA; // Add handler A -- instance.
         mc.Elapsed += ClassB.TimerHandlerB; // Add handler B -- static.
         Thread.Sleep(2250);
     }
}
Run Code Online (Sandbox Code Playgroud)

好的,现在在这里声明事件之后的行public event EventHandler Elapsed; ,private void OnOneSecond(object source, EventArgs args)我知道它之后的两行是检查事件是否包含方法,但是OnOneSecound用于什么?或什么时候叫它?或它的名字..它不是事件处理程序我猜对吗?什么是ElapsedOnOneSecond?之间的关系?

对不起新手问题..并提前感谢:)

Ric*_*end 7

当需要调用事件时,MyTimerClass将在内部调用OnOneSecond方法.

这是大多数控件使用的常见模式,包括微软控件.

基本上你不需要检查事件是否在多个地方设置,你只需在这一个方法中执行它,然后在内部调用此方法来引发事件.

例如,我倾向于不将事件args传递给OnXXX方法.

public event EventHandler<EventArgs> SomeEvent;
protected virtual void OnSomeEvent()
{
    if (this.SomeEvent !=null)
    {
        this.SomeEvent.Invoke(this,EventArgs.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后提高它

this.OnSomeEvent();
Run Code Online (Sandbox Code Playgroud)