C# 事件处理程序

本文关键字:程序 事件处理 | 更新日期: 2023-09-27 18:30:36

class Program
{
    public delegate void mydel();
    public static event mydel myevent;
    static void del()
    {
        Console.WriteLine("Called in del");
    }
    static void Main(string[] args)
    {
        myevent = del;
        myevent += new EventHandler(del);
        myevent();
        Console.ReadLine();
    }
}

myevent += new Eventhandler(del); 这条线不起作用...它生成错误"'del'匹配委托'System.EventHandler'没有重载"

C# 事件处理程序

只需添加处理程序:

    static void Main(string[] args)
    {
        myevent += del;
        myevent();
        Console.ReadLine();
    }

您的事件不是事件处理程序。您的事件属于 mydel 类型。

public delegate void mydel(); // declaring the delegate
public mydel myevent; // declaring an event of type mydel with signature void mydel()
public void del() {...} // this method fit the delegate
// myevent += new EventHandler(del); // myevent is not an EventHandler

问题出在行上

myevent = del;
myevent += new EventHandler(del);

只需删除它们并替换语法即可。

注册到事件的正确语法是:

myevent += new mydel(del);

myevent += del;

但不像你那样

myevent = del;

在调用事件之前,还应始终检查它是否为 null。

所以你的代码应该是:

class Program
{
    public delegate void mydel();
    public static event mydel myevent;
    static void del()
    {
        Console.WriteLine("Called in del");
    }
    static void Main(string[] args)
    {
        myevent += new mydel(del);
        if(myevent != null)
        {
           myevent();
        }
        Console.ReadLine();
    }
}

要了解有关活动和注册的更多信息,请阅读此处:

+= 运算符用于将委托实例添加到调用中 发布服务器中的事件处理程序的列表。记住,多个 订阅者可以注册参加活动。使用 += 运算符追加 基础委托调用列表的当前订阅者。

简化你的代码,然后它会像魔术一样工作!

static void Main(string[] args)
{
   myevent += del;
   myevent();
   Console.ReadLine();
}