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

4

3 回答 3

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
于 2013-09-09T10:24:50.267 回答
0

问题出在线条上

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

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

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

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

    }
}

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

+= 运算符用于将委托实例添加到发布者中事件处理程序的调用列表中。请记住,多个订阅者可能会注册该事件。使用 += 运算符将当前订阅者附加到基础委托的调用列表中。

于 2013-09-09T10:30:54.407 回答
0

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

static void Main(string[] args)
{
   myevent += del;
   myevent();
   Console.ReadLine();
}
于 2013-09-09T10:54:37.530 回答