委托是什么?在C#的视频中,楚广明老师说委托可以看成是一种数据类型,可以用于定义变量,但它是一种特殊的数据类型,它所定义的变量能接受的数值只能是一个函数。楚老师指出,委托更确切的说是一个能接受函数的一个变量,类似于C++的指针。
我没有学过C++,不知道C++的指针到底该怎么用,又有什么功能。所以,对于楚广明老师说的这些我是真的有点不明白,后来我看到这样几个例子:
例子一:这是两个数相加的例子。
例子二:这是上一个例子的应用,它用了委托。class Program { static void Main(string[] args) { MathOpt myopt = new MathOpt(); //类实例化 int Result=myopt.Add(1, 2); Console.WriteLine("其值是:" + Result ); //输出结果为3. } } public class MathOpt //定义类 { public int Add(int number1, int number2) //方法 { return number1 + number2; } }
例子三:这可以当做是委托的一个作用体现吧。public delegate int MathOptDelegate (int value1,int value2); //声明一个委托 class Program { static void Main(string[] args) { MathOpt myopt=new MathOpt (); //实例化MathOpt类 MathOptDelegate oppDel; //声明委托类型变量 oppDel =myopt .Add ; //给委托类型变量赋值,即把方法名赋给委托类型变量 int Result= oppDel (1,2); Console.WriteLine("值是:" + Result); //输出结果为3. } } public class MathOpt //定义一个类 { public int Add(int number1, int number2) //方法 { return number1 + number2; } }
前两个例子,让我知道委托该这么用,知道它的一个大概原理过程,但对于例子三,我发现我还是对委托的作用有点想不明白,我们为什么要用委托啊,不用委托,用别的方式实现不行吗?呵呵,还在进一步思考中~~~~~~public delegate int MathOptDelegate(int value1, int value2); //定义委托 class Program { static void Main(string[] args) { Console.WriteLine(PrintResult(MathOpt.Add, 6, 4)); //输出结果为10. Console.WriteLine(PrintResult(MathOpt.sub, 6, 4)); //输出结果为2. } public static int PrintResult(MathOptDelegate action, int a, int b) { int result = action(a, b); //MathOptDelegate action是一个委托数据类型,可以放一个函数在里面,action是通过委托将a、b的值传过去,进行运算。 return result; } } public class MathOpt { public static int Add(int arg1, int arg2) { return arg1 + arg2; } public static int sub(int arg1, int arg2) { return arg1 - arg2; } }