zoukankan      html  css  js  c++  java
  • 【c# 学习笔记】委托的使用

        //委托使用的演示
        class Program
        {
            //1.使用delegate关键字来定义一个委托类型
            public delegate void MyDelegate(int para1, int para2);
            static void Main(string[] args)
            {
                //2.声明委托变量d
                MyDelegate d;
    
                //3.实例化委托类型,传递的方法也可以为静态方法,这里传递的是实例方法
                d = new MyDelegate(new Program().Add);
    
                //4.委托类型作为参数传递给另一个方法
                MyMethod(d);
    
                Console.ReadKey();
            }
    
            void Add(int para1,int para2)
            {
                int sum = para1 + para2;
    
                Console.WriteLine("两个数的和为:" + sum);
            }
    
            private static void MyMethod(MyDelegate mydelegate)
            {
                //5.在方法中调用委托
                mydelegate(1, 2);
            }
        }

      从以上代码可以看出,使用委托的步骤为:定义委托类型—声明委托变量—实例化委托—作为参数传递给方法—调用委托。如下具体分析委托的使用过程。

      (1)定义委托类型: public delegate void MyDelegate(int para1, int para2);。其定义方式类似于方法的定义,只是多了一个delegate关键字。

      (2)声明委托变量:MyDelegate d;既然委托是一种类型,那么可以使用委托来声明一个委托变量,相当于int a;

      (3)实例化委托: d = new MyDelegate(new Program().Add);。第二步只是声明了委托变量,但并没有将它实例化。类的实例化使用new关键字来实现,而委托也属于类类型,所以委托的实例化也使用new关键字来进行的。这里需要注意的是,委托的实例化是用一个方法名(不能带左右括号)作为参数,并且该方法的定义必须符合委托的定义,即该方法的返回类型、参数个数和类型必须与委托定义中的一样。这样,前面3步就好比构造了一个律师对象,而方法InstanceMethod好比是当事人的方法。

      (4)作为参数传递给方法:MyMethod(d);。委托使用得在C#中,可以把一个方法作为另一个方法的参数,而委托可以看作是一个包装方法的对象。

      (5)在方法中调用委托。MyMethod(d);。委托使用得在c#中,可以把一个方法作为另一个方法的参数,而委托可以看作是一个包装方法的对象。

       总结:在使用委托时,需要注意以下几个问题。

        1.在第三步中,被传递的方法的定义必须与委托定义相同,即方法的返回类型和参数个数、参数类型都必须与委托相同。并且,传递的是方法名,方法名后不能带有左右括号。

        2.在第五步中,委托的调用与方法调用类似,传递的实参类型和个数必须与委托定义一致。

        3.由于委托是方法的包装类型,所以对委托的调用也就是对其所包装的的方法的调用,上面第5步时间上是调用了Add方法来对传入的实参进行计算。

          

  • 相关阅读:
    CentOS Linux使用crontab运行定时任务详解
    pycharm自定义代码片段
    迭代器:斐波那契数列
    mysql复习-来源考试
    复杂和遗留的数据库schema
    ubuntu系统AndroidStudio修改内存大小
    Hibernate设置时间戳的默认值和更新时间的自动更新
    Android 自定义view --圆形百分比(进度条)
    MYSQL 更新时间自动同步与创建时间默认值共存问题
    ubuntu virtualbox xp无声音解决
  • 原文地址:https://www.cnblogs.com/xiaoyehack/p/9475089.html
Copyright © 2011-2022 走看看