繁体   English   中英

在C#中实现事件

[英]Implementation of an Event in C#

对了,我看了所有我能得到我的手是提供C#(简单的实现事件的页123 )。 我只是无法让我的活动正常进行。 我正在从VB.net移植程序,该程序非常易于使用。

因此引发事件的类:

class TickerClass
    {

        // Event Setup
    public EventArgs e = null;
    public delegate void UpdateEventHandler(TickerClass t, EventArgs e);
    public event UpdateEventHandler Update;

    void doSomethingAndRaiseTheEvent()
    {
        Update(this, null);
    }
}

实例化TickerClass并处理事件的类:

public class Engine
{

   TickerClass ticker;

   // constructor
   public Engine()
   {
       ticker = new TickerClass();

       // subscribe to the event
       ticker.Update += new TickerClass.UpdateEventHandler(TickerUpdated);
   }

   // method to call when handling the event
   public void TickerUpdated()
   {
    //do stuff with ticker
   }

}

此实现有什么问题?

您的事件处理程序与用于定义事件的委托的签名不匹配,因为我确定您收到的错误消息会告诉您。

偶数签名表示它接受TickerClassEventArgs作为方法的参数。 您的事件处理程序都没有。

修复签名后,该示例将起作用。

请注意,定义您自己的自定义委托没有任何特殊原因; 为了方便起见,您可以改用Action

添加事件处理程序时,您也不需要明确声明委托的类型。 给定ticker.Update += TickerUpdated时,编译器可以进行推断。

TickerUpdated需要具有一个与您的UpdateEventHandler定义相匹配的签名:

public void TickerUpdated(TickerClass sender, EventArgs e)
{
    // This will work now

请注意,除了在引发事件时传递null ,使用EventArgs.Empty并以惯用的方式在处理程序上检查null也是一个好主意:

void doSomethingAndRaiseTheEvent()
{
    var handler = this.Update;
    if (handler != null)
        handler(this, EventArgs.Empty);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM