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

关于委托
小弟刚学委托,大概了解其用法,有一些地方还是理解不透彻,比如

public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
public class BoiledEventArgs : EventArgs
        {
            public readonly int temperature;
            public BoiledEventArgs(int temperature)
            {
                this.temperature = temperature;
            }
        }

这里的BoiledEventArgs 类在这里就不是很理解

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

BoiledEventArgs类不理解是什么意思?BoiledEventArgs继承于EventArgs类。然后定义了一个字段,一个构造方法。然后呢

看字面意思就能看出来了吧EventArgs 事件参数。
如果你的委托不需要参数,则这个累就是多余的。即使有参数,你也可以不用继承这个类,继承它只是为了更规范的写法。

如果两个窗口传值,是不是通过这种类的继承后,可以接收消息


可以这样做,但是你这样理解有些不妥。
这么说吧,你看委托的定义public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
和方法签名的定义只差一个delegate关键字。
在C#中,方法是不能作为参数传递的,对吧。委托的作用就是对一个方法进行“代理”,让其可以通过参数来传递。方法是什么,是一个功能块,一段处理逻辑,能把它当作参数来传递就意味着这段处理逻辑可以重用,可以被替换,是一种很强的抽象能力,只是c#不支持把方法当作参数,所以才有了委托这个包装类型来包装方法。

------解决方案--------------------
把委托看成对方法的包装,那么,这个方法可以有参数,也可以无参数,所以你的疑问应该不是什么疑问了吧。

Object sender, EventArgs e

这种东西是一般事件里面常见的,因为事件处理程序需要知道当前触发事件是谁(sender),传递了什么参数e,如果你的事件不需要知道这些信息,那么这两个参数就可以去掉。
------解决方案--------------------
建议楼主看看设计模式的委托模式。从某种角度讲,c#中的委托,可以看做是委托模式的一种简化实现。http://www.blueidea.com/tech/program/2007/4959_5.asp