zoukankan      html  css  js  c++  java
  • 委托的生明与使用

    什么是委托
       首先要知道什么是委托,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。
     
    如何使用委托
       在使用委托的时候,你可以像对待一个类一样对待它。即先声明,再实例化。只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托。

    -----------------------------------------------

    定义一个委托:

    委托的生明:可以在命名空间内的任何地方生明。用到的关键字: delegate

     public delegate void GreetHandler();//定义委托

    class Program
        {
            static void Main(string[] args)
            {
                //创建委托方法(方法一)
                //GreetHandler greetHandler;
                //greetHandler = ChineseGreet;//赋值(第一个方法只能用赋值符)
                //greetHandler += EnglishGreet;//绑定方法
                //greetHandler -= ChineseGreet;//解除绑定
                //greetHandler();//使用委托

                //创建委托方法(方法二)
                GreetHandler greetHandler = new GreetHandler(ChineseGreet);
                greetHandler += EnglishGreet;
                greetHandler();
            }
            public static void ChineseGreet()
            {
                Console.WriteLine("早上好!");
            }
            public static void EnglishGreet()
            {
                Console.WriteLine("Good Morning!");
            }
        }

    ---------------------------------

    有参数类型的委托 

    先生明一个类 

     class Arithmetic
        {
            public int Add(int num1,int num2)
            {
                return num1 + num2;
            }
            public int Reduce(int num1, int num2)
            {
                return num1 - num2;
            }
        }

    如果参数为引用类型时 : 在参数的前面加 一个 ref 的关键字

    public delegate int ArithHandler(int num1, int num2);
        class Program
        {
            static void Main(string[] args)
            {
                Arithmetic arithmetic = new Arithmetic();
                ArithHandler arithHandler = new ArithHandler(arithmetic.Add);
                arithHandler += arithmetic.Reduce;
                int result = arithHandler(5, 3);//result接收最后一个方法执行的结果
                Console.WriteLine("结果为:" + result);
            }
        }

    ------------------------

    委托也可以调用匿名方法 很多时候是用于只调用一次的方法:

     public delegate void HelloHandler();
        public delegate int CalHandler(int num1,int num2);
        class Program
        {
            static void Main(string[] args)
            {
                //将匿名方法赋给委托(无参无返回值的匿名方法)
                HelloHandler helloHandler = delegate()
                {
                    Console.WriteLine("你好!");
                };
                helloHandler();

                //有参有返回值的匿名方法
                CalHandler calHandler = delegate(int a, int b)
                {
                    int num = a + b;
                    return num;
                };
                int result = calHandler(5,3);
                Console.WriteLine(result);
            }
        }

     --------------------------------------------

    事件 事件是一种特殊的委托

     /*********事件*************/
        public delegate void GreetHandler();//定义委托
        class Program
        {
            public static event GreetHandler MyEvent;//声明事件(发布事件)
            static void Main(string[] args)
            {
                MyEvent += new GreetHandler(ChineseGreet);//订阅事件
                MyEvent += new GreetHandler(EnglishGreet);
                MyEvent();//触发事件
            }
            public static void ChineseGreet()
            {
                Console.WriteLine("早上好!");
            }
            public static void EnglishGreet()
            {
                Console.WriteLine("Good Morning!");
            }
        }

  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/cl1006/p/4467747.html
Copyright © 2011-2022 走看看