猫和老鼠——委托与事件

【前言】

最初开始接触到委托与事件是在看《大话设计模式》这本书时,当时对这块知识不太理解,对它也有一定的抵触心理,就在前两天勇杰组织在我们小组中讨论一下委托,通过这次讨论才进一步了解了委托与事件。

【正文】

有一个猫叫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);
        }
    }

其实这也是我的一点点理解,下面分享一篇文章,可以更加的理解一下委托与事件

委托与事件

【总结】

再一次感受到团队的力量,这次讨论还吸引了白靖和雨烁两位大美女的助阵,我们几个人互相交流自己的想法,通过思维的碰撞,发现学习是一个很有趣的事情,简单而又快乐。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值