日期:2014-05-17 浏览次数:21038 次
这几天看完了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);通过委托,我们就可以去进行相应的计算了,现在只是初步理解,我想等接触更大的项目会理解的更好吧