日期:2014-05-19  浏览次数:20452 次

-----为什么这个委托和事件总是错误,在线等----
假设我的页面有三个button

public   delegate   void     Handleraa(object   sender,   System.EventArgs   e);

public       event       Handleraa       myevent;  
private   void   Page_Load(object   sender,   System.EventArgs   e)
{

this.Button2.Click   +=   new   System.EventHandler(this.Button1_Click);//这行把Button1_Click给Button2.Click就没有错

myevent=new     Handleraa(this.Button1_Click);
this.Button3.Click   +=myevent;     //错误,提示无法将类型“Handleraa”隐式转换为“System.EventHandler”
}

public   void   Button1_Click(object   sender,   System.EventArgs   e)
{
Response.Write( "fsdfsdf ");
}

即使我强制转换this.Button3.Click   +=(System.EventHandler)myevent也还是一样

为什么   ???!!!

------解决方案--------------------
对于自定义事件,最好使用EventHandler或EventHandler <T> ,而不是自己来定义一个委托.比如:

public event EventHandler someEvent;
------解决方案--------------------
使用EventHandler相当于是按一个约定或者说标准来做,使用自定义的委托可以定义事件,但这样失去了标准.
------解决方案--------------------
class Button
{
public event EventHandler Click;
}

//是EventHandler委托的事件
你定义的Handleraa貌似 返回值和参数列表都一致 但确是两个不同的东西

就比方有对双胞胎 长得一样 而且都叫张三 你却不能把他们当作一个人把
------解决方案--------------------
Button3.Click 的委托类型为EventHandler