委托的定义: public delegate 返回类型 FuncDelegate(参数列表); 这里是一个类型,可以定义一个FuncDelegate类型的变量 而定义的这个变量就可以存放与这个委托具有相同返回值类型、相同参数类型的方法名
委托与函数指针的区别:
函数指针是面向过程的,它指向内存空间的一片地址,再由地址找到函数的代码块,去执行代码。 委托是面向对象的,是一个类(用Reflector查看,是new出来的),实际上是将方法名作为参数传递进来进行了封装,在调用的时候直接调用这个方法。
委托本质是一个类。委托内部(在其父类MulticastDelegate)有一个集合(invocationList)来维护方法列表,执行的时候是调用方法列表中的方法,即用委托名.Invoke();同时有一个invocationCount变量记录方法列表中方法的个数,而对于实例,是将其存放在基类Delegate的Target中的。(如下例的name字段)
下图是对委托原理的大致总结: