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!");
            }
        }

  • 相关阅读:
    网线帘幕动画
    图片缩放/旋转/平移/设置分辨率
    贝塞尔样条
    线性梯度画刷
    画七彩五角星
    kafka安装
    在windows远程提交任务给Hadoop集群(Hadoop 2.6)
    把Spark SQL的metadata存储到mysql
    使用IDEA开发SPARK提交remote cluster执行
    Netty的Channel
  • 原文地址:https://www.cnblogs.com/cl1006/p/4467747.html
Copyright © 2011-2022 走看看