委托和事件——老鼠跑和猫叫

简介: 委托和事件——老鼠跑和猫叫

CatShoutEventArgs 类:猫叫事件参数类,目前的属性只有猫的name

    //EventArgs是包含事件数据的类的父类,作用是事件触发时传递数据
    class CatShoutEventArgs : EventArgs
    {
        private string name;
        public string Name
        {
            get{return name;}
            set { name = value; } 
        }
    }

Cat类:猫一叫,老鼠就跑

    class Cat
    {
        private string name;
        public Cat(string name)
        {
            this.name = name;
        }
        //sender:发送通知让老鼠快跑的那个对象,其实还是老猫
        //agrs:所有接收者需要附件的信息,这里是老猫的名字
        public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args);
        public event CatShoutEventHandler CatShout;
        public void Shout()
        {
            Console.WriteLine("喵,我是{0}", name);
            if (CatShout !=null)
            {
                //声明并实例化一个CatShoutEventArgs对象e
                CatShoutEventArgs e = new CatShoutEventArgs();
                //赋值老猫的名字
                e.Name = this.name;
                //事件触发时,通知所有登记过的对象,并将发送通知的自己(老猫的名字),和老鼠Run需要的数据传递过去(这里需要的还是老猫的名字)
                CatShout(this, e);
            }
        }
    }

Mouse类:边跑边喊 “老猫xx来了,xx(自己的名字)快跑!”

    class Mouse
    {
        private string name;
        public Mouse(string name)
        {
            this.name=name;
        }
        //object sender:通知者的对象(老猫的名字)
        //CatShoutEventArgs args:所有接收者需要附件的信息(老鼠1和老鼠2的方法Run都需要老猫的名字,所以这里是两遍老猫的名字)
        public void Run(object sender,CatShoutEventArgs args)
        {
            Console.WriteLine("老猫{0}来了,{1}快跑",args.Name ,name);
        }
    }

客户端:

        static void Main(string[] args)
        {
            Cat cat = new Cat("Tom");
            Mouse mouse1 = new Mouse("Jerry");
            Mouse mouse2 = new Mouse("Jack");
      //将老鼠的Run方法通过实例化了的委托Cat.CatShoutEventHandler,登记到猫的实践CatShout当中。
      //委托是一个类,可以实例化,委托是对函数的封装,实例成了一个具体的函数
            cat.CatShout += new Cat.CatShoutEventHandler(mouse1 .Run );
            cat.CatShout += new Cat.CatShoutEventHandler(mouse2 .Run );
            //Shout();方法里包含了对事件CatShout的操作,这里就触发了事件CatShout,紧接着方法Shout()就会委托Cat.CatShoutEventHandler通知老鼠的方法Run跟着运行。
            cat.Shout();
        }
相关文章
观察者模式(委托和事件)——老板来了我不知道
观察者模式(委托和事件)——老板来了我不知道
开门小例子学习观察者模式&事件与委托
3.2.一个喊话人(喊话人有权限),多个拿钥匙开门的人(每个人负责不同的门):米老师大喊给我开一下水麒麟的门——>此时听到消息并且拿着水麒麟钥匙的人就会过来开门
|
10月前
|
数据安全/隐私保护
都说太多if...else不好,可是有哪些优雅的处理方法,你还在写面条代码么!
都说太多if...else不好,可是有哪些优雅的处理方法,你还在写面条代码么!
58 0
|
JavaScript 前端开发
以【猫叫、老鼠跑、主人醒】为例子,使用 javascript 来实现 观察者模式 (有在线演示)
  “猫叫、老鼠跑、主人醒”是一个很古老的话题了,大家也都有各自的想法和解决方案。我也是看了很多,一开始的时候是相当的迷糊,这个怎么就是面试题了?考的是啥呀,和编程有关系吗?又是猫又是老鼠的,晕死了。
1520 0
|
C# C++
由猫捉老鼠想起的——关于继承、接口和引用
用C#写了几年的网站,虽然感觉上没什么问题了,但是对于基础知识一直都是模模糊糊的,最近几天重新学习了一下基础知识,感受颇深。对于类、封装、继承、多态、接口等有了新的认识。我想说说我的想法,请大家看看对不对。
826 0
|
C#
艾伟:C# 中的委托和事件
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。
781 0
|
C#
艾伟_转载:解惑答疑:C#委托和事件
  相信很多人一直为C#委托和事件所困惑,尤其是C#的初学者,学到这一部分会感觉比较困难,很有可能就放弃了,而且.NET对委托和事件封装得挺好,一般都不怎么用到自定义的委托和事件,所以放弃学习该技术就有了借口!   网上也有不少此类的文章,最具代表性的是张子阳的C#中的委托和事件这篇,写得的确很好,...
1369 0
|
.NET
艾伟_转载:把委托说透(2):深入理解委托
在上一篇随笔中我们通过示例逐步引入了委托,并比较了委托和接口。本文将重点剖析委托的实质。 委托在本质上仍然是一个类,我们用delegate关键字声明的所有委托都继承自System.MulticastDelegate。
1082 0
|
JavaScript
用接口实现事件的一种方法,只是玩玩。
  前一阵子,firelong说,应该用接口实现事件,而不应该用委托。我就希望他能给出一个用接口实现事件的方法,我是一直等呀,等到了现在也没有看到。     昨天又看到了,Snake@Net  说不要把接口和委托给混淆了的文章。
696 0