日期:2014-05-17  浏览次数:20833 次

有了委托为什么还要事件
终于对委托有了个大概的认识,但是我现在不清楚为什么有了委托为什么还要有事件。

1,事件好比就是委托的实例化,为什么不就用委托的实例呢?
2,委托链和事件的注册很相似,这不又重复了吗?


请大大们详细一点,或者推荐有启发的文章链接。

------解决方案--------------------
有些情况只用委托是无法胜任的
------解决方案--------------------
探讨
事件好比就是委托的实例化 错
委托链和事件的注册很相似 错
你的认识都是错的。

------解决方案--------------------
事件也是一种委托,只不过事件是一种委托链,只能够 += 或者 -= ,这么限制是防止之前添加的委托被覆盖。
------解决方案--------------------
事件和委托本质是同样的东西,两者又有所区别,分别用在不同场合
比如在使用回调函数的时候只能使用委托,
而在定义事件的时候,委托也能实现事件的全部功能,但是假如你要在Interface中定义事件,或者你不想你的事件被人在类外面随便操作,那么你必须使用事件来定义
------解决方案--------------------
你需要一个例子来说明,委托和事件的区别这应该不用说了,网上找找一大堆,但是你没有实际操作过,因此不知道事件的好处。虽说事件是特殊的委托,但是功能上却是委托无法替代的。当我们定制一个多功能控件的时候,或者设计一个多功能Form的时候(所谓的多功能,就是可以让不同的调用方重复利用,已达到各种需求),我们可能会直接往那个控件或者Form中添加事件响应的方法,但是该事件响应是添加而不应该是覆盖原有的,如果那个控件或者Form的某个事件本身也有需要响应的方法,在使用委托的情况下,调用方如果要自己设定,会把原来的替换掉,从而丢失了原来控件的功能,甚至会出错,但事件不会这样,事件里可以存放多个响应的方法,各自不冲突,按照添加的顺序依次执行,这就是优势所在。
------解决方案--------------------
有的东西需要系统的学习,思考,实践,积累。不是旁人三言两语就说的清楚的啊
------解决方案--------------------
C# code

// 摘要:
    //     表示将处理不包含事件数据的事件的方法。
    [Serializable]
    [ComVisible(true)]
    public delegate void EventHandler(object sender, EventArgs e);