【前言】
最初开始接触到委托与事件是在看《大话设计模式》这本书时,当时对这块知识不太理解,对它也有一定的抵触心理,就在前两天勇杰组织在我们小组中讨论一下委托,通过这次讨论才进一步了解了委托与事件。
【正文】
有一个猫叫Tom,两只老鼠Jerry和Jack,Tom只要一叫‘瞄,我是Tom’,两只老鼠就说‘老猫来了,快跑’
Why?
在生活中老鼠是能听见猫叫的,可是在计算机语言中怎样让老鼠听见猫“叫”,这里就用到了委托事件的方法。
What?
委托:是对函数的封装,可以当做给方法的特征指定一个名称,是一种引用方法的类型(将方法作为一个参数传到委托中)
事件:发生其他类或对象关注的事情时,类或对象可通过事件通知他们(发生老鼠关注的猫来了的事情,猫通过事件通知老鼠)
猫和老鼠的例子:
猫通过事件委托老鼠跑
How?
static void Main(string[] args)
{
Cat cat = new Cat("Tom"); //实例化老猫Tom
Mouse mouse1 = new Mouse("Jerry"); //实例化老鼠Jerry
Mouse mouse2 = new Mouse("Jack"); //实例化老鼠Jack
cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);//将Jerry的Run方法 通过 实例化委托 Cat.CatShoutEventHandler 登记到 Cat的事件CatShout 当中,也就是 Tom委托Jerry跑 作为Tom的一个事件
cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);
cat.Shout();
Console.Read();
}
class Cat
{
private string name;
public Cat(string name) //构造函数
{
this.name = name;
}
public delegate void CatShoutEventHandler(); //声明一个委托CatShoutEventHandler
public event CatShoutEventHandler CatShout; //声明一个事件CatShout,它的事件类型是委托CatShoutEventHandler
public void Shout() //事件触发机制(必须和事件在同一个类中),外界无法用CatShout()来触发事件
{
Console.WriteLine("瞄,我是{0}.", name);
if (CatShout != null) //事件CatShout 中有对象登记事件,则执行CatShout()
{
CatShout(); //执行委托的事件
}
}
}
class Mouse
{
private string name;
public Mouse(string name)
{
this.name = name;
}
public void Run()
{
Console.WriteLine("老猫来了,{0}快跑", name);
}
}
委托与事件
【总结】
再一次感受到团队的力量,这次讨论还吸引了白靖和雨烁两位大美女的助阵,我们几个人互相交流自己的想法,通过思维的碰撞,发现学习是一个很有趣的事情,简单而又快乐。