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'”
答案 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();
}