zoukankan      html  css  js  c++  java
  • 什么是委托?

    比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。你命令小王注意小张,在开发软件工作的时候如果上网打游戏,你就记录下来,从小张工资里扣100元钱。这个实际上就是现实中的委托。  
       
      这个实际上就是委托,编写程序的就是老板,运行时就是场景,小张和小王就是两个对象,小张上网打游戏就是对象的一个方法,你指定小王注意上网打游戏就是你定义一个事件,你指定小王扣100元钱就是小王对象的一个方法,这个方法在事件发生的时候自动被调用。  
       
      所以委托必须有三个要素:  
      1   激发事件的对象,就是小张。  
      2   定义事件,就是你要让小王监视。  
      3   事件发生后执行的方法,就是让小王扣小张100元钱。  
       
      在程序中定义好上面三个要素后,实际上你就定义了一个委托

     

    using System;

    namespace CSharpConsole
    {
        public class 场景
        {
            [STAThread]
            public static void Main(string[] args)
            {
                Console.WriteLine("场景开始了....");
                //   生成小王  
                小王 w = new 小王();
                //   生成小账  
                小张 z = new 小张();

                //   指定监视  
                z.PlayGame += new PlayGameHandler(w.扣钱);

                //   开始玩游戏  
                z.玩游戏();

                Console.WriteLine("场景结束...");
                Console.ReadLine();
            }
        }

     

        //   负责扣钱的人  
        public class 小王
        {
            public 小王()
            {
                Console.WriteLine("生成小王...");
            }

            public void 扣钱(object sender, EventArgs e)
            {
                Console.WriteLine("小王:好小子,上班时间胆敢玩游戏...");
                Console.WriteLine("小王:看看你小子有多少钱...");
                小张 f = (小张)sender;
                Console.WriteLine("小张的钱:   " + f.钱.ToString());
                Console.WriteLine("开始扣钱......");
                System.Threading.Thread.Sleep(500);
                f.钱 = f.钱 - 500;
                Console.WriteLine("扣完了....现在小张还剩下:" + f.钱.ToString());
            }
        }

        //   如果玩游戏,则引发事件  
        public class 小张
        {
            //   先定义一个事件,这个事件表示“小张”在玩游戏。  
            public event PlayGameHandler PlayGame;
            //   保存小张钱的变量  
            private int m_Money;

            public 小张()
            {
                Console.WriteLine("生成小张....");
                m_Money = 1000;   //   构造函数,初始化小张的钱。  
            }

            public int 钱   //   此属性可以操作小张的钱。  
            {
                get
                {
                    return m_Money;
                }
                set
                {
                    m_Money = value;
                }
            }

            public void 玩游戏()
            {
                Console.WriteLine("小张开始玩游戏了.....");
                Console.WriteLine("小张:CS好玩,哈哈哈!   我玩.....");
                System.Threading.Thread.Sleep(500);
                System.EventArgs e = new EventArgs();
                OnPlayGame(e);
            }

            protected virtual void OnPlayGame(EventArgs e)
            {
                if (PlayGame != null)
                {
                    PlayGame(this, e);
                }
            }
        }

        //   定义委托处理程序  
        public delegate void PlayGameHandler(object sender, System.EventArgs e);
    }

    /*实际上,委托很容易理解。委托就是在条件成立的时候触发一个事件,从而可以调用一段代码。这个概念可以转换到现实中来。   
        
      */

    C# 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。

  • 相关阅读:
    FAT32文件系统的存储组织结构(一)
    导出CCS3.3数据及使用matlab处理的方法
    lua入门之二:c/c++ 调用lua及多个函数返回值的获取
    汇编入门学习笔记 (七)—— dp,div,dup
    Linux(CentOS)的server安装及配置图解(图文)
    利用cURL会话获取一个网页
    超级账本环境搭建fabric
    以太坊主链同步
    geth 命令
    solc 编译Solidity
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/1277936.html
Copyright © 2011-2022 走看看