C#EventHandler

时间:2013-09-09 10:21:47

标签: c# events delegates

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'”

3 个答案:

答案 0 :(得分:1)

只需添加处理程序:

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

    }

您的活动不是EventHandler。您的活动类型为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

答案 1 :(得分:0)

问题在于行

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

删除它们并替换syntex。

注册活动的正确syntex是:

myevent += new mydel(del);

myevent += del;

但不像你那样

myevent = del;

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

所以你的代码应该是:

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();

    }
}

了解有关活动的更多信息并注册阅读here

  

+ =运算符用于将委托实例添加到调用   发布者中的事件处理程序列表。记住,多重   订阅者可以注册该活动。使用+ =运算符追加   当前订阅者到底层代理的调用列表。

答案 2 :(得分:0)

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

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