zoukankan      html  css  js  c++  java
  • 委托和简单事件的理解

    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();

            }

        }

     

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

  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/gaojiangshan/p/2478130.html
Copyright © 2011-2022 走看看