【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方法来对传入的实参进行计算。

      

posted @ 2018-08-14 15:53  DonaldL.Shaw  阅读(339)  评论(0编辑  收藏  举报