小弟刚学委托,大概了解其用法,有一些地方还是理解不透彻,比如public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int temperature)
{
this.temperature = temperature;
}
}
这里的BoiledEventArgs 类在这里就不是很理解
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int temperature)
{
this.temperature = temperature;
}
}
这里的BoiledEventArgs 类在这里就不是很理解
如果你的委托不需要参数,则这个累就是多余的。即使有参数,你也可以不用继承这个类,继承它只是为了更规范的写法。
如果你的委托不需要参数,则这个累就是多余的。即使有参数,你也可以不用继承这个类,继承它只是为了更规范的写法。
如果两个窗口传值,是不是通过这种类的继承后,可以接收消息
如果你的委托不需要参数,则这个累就是多余的。即使有参数,你也可以不用继承这个类,继承它只是为了更规范的写法。
如果两个窗口传值,是不是通过这种类的继承后,可以接收消息可以这样做,但是你这样理解有些不妥。
这么说吧,你看委托的定义public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
和方法签名的定义只差一个delegate关键字。
在C#中,方法是不能作为参数传递的,对吧。委托的作用就是对一个方法进行“代理”,让其可以通过参数来传递。方法是什么,是一个功能块,一段处理逻辑,能把它当作参数来传递就意味着这段处理逻辑可以重用,可以被替换,是一种很强的抽象能力,只是c#不支持把方法当作参数,所以才有了委托这个包装类型来包装方法。
为什么不直接打印出来Hell world.为嘛要用事件委托绕这么大个弯. 这就是事件委托的2B之处,封装,只留下所谓的处理接口,把肠子的功能放在肚子封装好,只留个吃东西的嘴在外面.
假如你就是那肚子public class Stomach;
public class Stomach {
//1 ,你委托嘴来吃东西
protected delegate void Mouth(object sender, System.EventArgs e);
//2
//还要定义个"吃"的事件(就是说,当有"吃"的事件时,才能吃,不是说有了嘴就可以吃了
protected event Mouth EatEvent;
//3
// 还要定义个事件激发器, 由它来发生吃的事件.想吃并是不那么容易
//这就是微软泥玛的SB封装,接口,一大串长长的奇怪英文名字,拐弯抹角,让我们做着与编程不相干的工作.
//所以它们现在开始喜欢jQuery了
public void RaiseEetEvent()
{
//这里就是那吃的事件参数,就是你问的主题,注意吃的事件是主要的,你问的那个事件参数
// 只是个副作用,比如,包括了今天要吃牛肉,还是包子,之类的信息
System.EventArgs e = new System.EventArgs();
if (EatEvent != null) EatEvent(this, e);
}
}
你就是那肚子,你把消化的主要工作都做了,只留个嘴在外面,吃东西.
所以,如果我是身体,我要用你 ,我就不用再考虑你是怎么消化掉它们,那么我只要继承你,处理嘴巴的工作就可以了
public class Body: Stomach
{
// 1 然后,添加一个吃的事件,并委托 我的嘴来吃
public Body(){ EatEvent += new Mouth(MyMouth); }
void MyMouth(object sender, System.EventArgs e){
// 别忘了, 你是肚子,你留了个嘴巴在外面,我是身体,我现在继承,我可以在这吃我想吃的东西
}
}
上面的都是准备工作,真正的工作下面才开始.微软就喜欢搞复杂,把你搞糊涂.
最后最后正式的工作开始了,有三个主角 一个是你stomach 另一个是我body 还有一个就是 事件发生器
static void main()
{
Body me= new Body();
me.RaiseEatEvent();
//调用事件发生器,产生了一个事件的事件. 然后就按上面的分工开始工作
}