• 委托和简单事件的理解


    1.室友带饭

          叫室友带饭现在是一个非常普遍的一个现象,比如某个人在认真的打着游戏,就会委托室友给他带饭回来。那我们在程序中怎么来实现这个过程呢?

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

     

    namespace 委托1

    {

          //小明

        class XiaoMing

        {

            public static void Help()

            {

                Console.WriteLine("哼!自己在寝室玩游戏不去吃饭叫我带,我欠你的呀!");

            }

        }

     

          //Program代表打游戏叫小明带饭的人

        class Program

    {

         // HelpEventHandler中的EventHandler是标准命名的方式,您也可以想一个自己的名字

         // delegate声明委托的关键字,public delegate void HelpEventHandler();这就是声明一个委托。其实就是一个命令,

            public delegate void HelpEventHandler();

     

            static void Main(string[] args)

            {

                HelpEventHandler heh = new HelpEventHandler(XiaoMing.Help);

                heh();

                Console.ReadKey();

            }

        }

    }//end of namespace

     

     

     

    下面来看看这段代码:

    public delegate void HelpEventHandler();

     

            public static void Help()

            {

                Console.WriteLine("哼!自己在寝室玩游戏不去吃饭叫我带,我欠你的呀!");

            }

    从这段代码可以看出委托的返回值和参数列表,一定要和你想要绑定的方法的返回值和参数列表一样。

    HelpEventHandler(XiaoMing.Help);

    必须加上方法,因为委托的构造函数不为空。

     

    2.不仅带饭,打游戏打渴了来一瓶矿泉水

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

     

    namespace 委托1

    {

          //小明

        class XiaoMing

        {

            public static void HelpX()

            {

                Console.WriteLine("哼!自己在寝室玩游戏不去吃饭叫我带,我欠你的呀!");

            }

        }

          //王麻子

        class WangMaZi

        {

            public static void HelpW()

            {

                Console.WriteLine("天气太热了,来瓶矿泉水!");

            }

        }

          //打游戏的老兄

        class Program

        {

            public delegate void HelpEventHandler();

     

            static void Main(string[] args)

            {

                HelpEventHandler heh = new HelpEventHandler(XiaoMing.HelpX);

                heh += WangMaZi.HelpW;

                heh();

                Console.ReadKey();

            }

        }

    }//end of namespace

     

    这个例子和上一个唯一的差别就是绑定了一个方法。可以理解为委托链。就是同一个命令可以执行多个动作了。

    总结:

    委托的声明方式:

    public delegate void 委托名();//声明委托

            public static void 方法名()//需要绑定的方法

            {

                方法体;

            }

                 委托名 实例名 = new 委托名(方法名);

                实例名();

          委托其实就是一个命令。这个命令可以绑定多种响应。

     

     

    下面我们来看看什么是事件

       网银想必很多童鞋都开通了吧,有的网银就有这么一个功能就是,当你在网上每消费一笔的时候就会有相应的短息提示。为什么会有这个短信提示呢,(这还用问么,当然是我声请网银的时候开通了短信提示功能的噻),对,事件就和您去开通网银到消费到收到消费提示这一过程是一个道理,我们先来理一理这个过程哈。

    首先你到银行开通网银和银行谈好只要有消费就要以短信方式通知(这就相当于你到银行注册了一个消费提醒的事件,委托银行把消费信息以短信的形式发给自己)。可能你这是就会问了,银行怎么知道什么时候改发短信提醒我呢。是呀!银行怎么知道么时候发呢。哈哈您忘了开户时不是我们在银行注册了一个消费提醒事件么,不错当我们只要有消费就触发了提醒事件,这是就自动给我们发短信了,

    先来看看具体的实现把;

    //小明的手机

        class XiaoMingPhone

        {

            public static void Prompt()

            {

                Console.WriteLine("尊敬的用户你好,谢谢你在京东商城的消费");

            }

    }

     

        //银行

        class Bank

        {

            public delegate void sendMessage();//声明一个委托

            public event sendMessage Consumption;//声明一个发信息这个事件

     

             public void isConsum()//触发发短信的信号

             {

                 if (Consumption != null)//判断是否注册了消费提醒

                 {

                     Consumption();

                 }

             }

        }

     

        class Program

        {

            static void Main(string[] args)

            {

                //随便去一个银行,注册自己的消费提醒时事件,把自己的消费提醒委托给银行

                Bank b = new Bank();

                 b.Consumption += new Bank.sendMessage(XiaoMingPhone.Prompt);//注册消费提醒事件

               

                b.isConsum();//您在网上消费了,触发发短信的信号了

                Console.ReadKey();

            }

        }

     

    委托和事件的理解在于自己想一个情景把他模拟出来,现在动手自己模拟一个情景出来,这时你会发现委托原来就这么回事。大家先学会一般委托和一般自定义事件的写法,后续再献上标准事件的写法。

  • 相关阅读:
    Appium+unittest+PageObject实例
    monkeyrunner简单用法
    Mac电脑修改系统文件夹的权限
    UIImage剪切
    LLDB 打印 frame
    打开qq在线聊天
    获取当地时间
    微信支付SDK使用心得
    获取当前星期几
    UIView相对于屏幕的frame
  • 原文地址:https://www.cnblogs.com/gaojiangshan/p/2478130.html
Copyright © 2020-2023  润新知