日期:2014-05-17  浏览次数:20994 次

浅谈对委托的理解--c#

    这几天看完了C# 视频,其中的一些基础知识,继承,接口,多态等等一些理解的还可以,但是又接触到了一个新的词----委托。对此理解的不是很好,在经过深入的查找和学习一些资料后,写下自己的一点理解

    什么是委托?

    生活中:比如说公司老板出差了,那么公司的一些事物就需要人来管理,这时候老板告诉他的秘书在他出差的时间帮助他干什么,这就是委托。

    开发中: 委托也可以看成一种数据类型,可以用于定义量,但是它是一种特殊的数据类型,它所定义的变量类型的数值只能是一个函数,更确切的说,委托类型的变量可以接收的数值只能是函数,委托的变量可以接收一个函数的地址,类似于C++语言的函数指针。

   委托关键字 

      Delegate 

 

 下面看一个小例子来了解一下委托如何应用到代码中 

 

 class Program
    {
        static void Main(string[] args)
        {

            MathOptDelegate oppDel; //在Main()方法中定义一个委托类型的变量
            MathOpt obj = new MathOpt();
            oppDel = obj.Add; //给此委托类型赋值
            Console.WriteLine(oppDel(1, 2)); //输出3

        }
    }
    public class MathOpt
    {
        public int Add(int arg1, int arg2)
        {
            return arg1 + arg2;
        }
    }
    public delegate int MathOptDelegate(int value1,int value2);
    //定义了一个委托数据类型 MathOptDelegate,delegate为关键字

  注释:  在写委托这个函数时要注意的两点

            1. 一定要指明委托的类型是什么,比如是int 类型 或是其他的  

            2.委托事件的函数名字,一定要和我们类的名字保持一致,例如例子中类名是MathOpt 那么委托的名字也要是MathOptDelegate. 

     看到这我就想问,为什么要这样实现呢,我完全可以直接调用,根本不用委托就能实现,为什么还要通过委托来间接的调用呢?对此也是很不解,查了资料说是使代码的使用灵活了,有扩展性。

     这只是一个简单的小例子,假如在开发过程中,我们要实现很多功能,例如要实现对两个数的加法  减法  乘法  除法等等,如果我们想实现只需要给出两个数,和你想实现的操作方法,例如减法,那么我们就要写很多歌可能性来完成这些操作,这时候委托就派上用场了 

     例如下面的代码:

     

class Program
    {
        static void Main(string[] args)
        {

            PrintResule(MathOpt.Add, 4, 5);
        }
        public static int PrintResule(MathOptDelegate action, int a, int b)
        {
            int result = action(a, b);
            return result;
        }
    }

    public static class MathOpt
    {
        public static int Add(int arg1, int arg2)
        {
            return arg1 + arg2;
        }
        public static int Sub(int arg1, int arg2)
        {
            return arg1 - arg2;
        }
    }
    public delegate int MathOptDelegate(int value1,int value2);
     通过委托,我们就可以去进行相应的计算了,现在只是初步理解,我想等接触更大的项目会理解的更好吧