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

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

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();
        }
相关文章
|
7月前
|
前端开发 程序员
老程序员分享:jquerytooltip事件
老程序员分享:jquerytooltip事件
31 0
开门小例子学习观察者模式&事件与委托
3.2.一个喊话人(喊话人有权限),多个拿钥匙开门的人(每个人负责不同的门):米老师大喊给我开一下水麒麟的门——>此时听到消息并且拿着水麒麟钥匙的人就会过来开门
|
缓存 Dubbo NoSQL
AOP 造火箭事件始末
AOP 造火箭事件始末
[观点]企业自杀行为:重写程序
导读:原文来自steveblank.com,作者steveblank写的《Startup Suicide – Rewriting the Code》,由外刊IT评论翻译《企业自杀行为:重写程序》。 以下是全文: 敏捷开发和最小化功能组合的好处是能持续得到客户反馈,快速迭代,防止无用程序的产生。
1083 0
|
C#
艾伟_转载:C#中的委托和事件-抛砖引玉
  最近在学习委托和事件,在书店里面看了好多书,但是都是迷迷的…… 今天在博客园里面看到了 张子阳 所写的博客C#中的委托和事件:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.
1225 0
|
C# C++
由猫捉老鼠想起的——关于继承、接口和引用
用C#写了几年的网站,虽然感觉上没什么问题了,但是对于基础知识一直都是模模糊糊的,最近几天重新学习了一下基础知识,感受颇深。对于类、封装、继承、多态、接口等有了新的认识。我想说说我的想法,请大家看看对不对。
849 0
抛开书本谈 委托,为什么需要委托,它成就了什么?
博文技术有限,重在学习交流,有错误大家指正。 思路: 传统的方法调用------>委托的出现解决了什么问题---->委托的绑定方法----->总结   1.传统的方法调用 View Code 缺点:100个方法就要调用100次,如果每个人 对方法的需求不一样,就不能很好的处理了。
622 0

热门文章

最新文章