委托理解

由来:

首先我们有普通函数 string StringProcess(string s){}

如果想把此方法当作参数进行传递,如 void M4(StringProcess method,string str){  method(str);},这时候就需要一个类型来存储这个方法,于是就有了新的类型:委托,

声明委托方式:public delegate string StringProcess(string s);

存储什么样的方法就声明什么类型(方法参数与返回值)的委托。委托是一种数据类型,像类一样,如果要用的话还要声明委托类型的变量。将委托类型变量指向函数 StringProcess sp = new StringProcess(SayHello),也可以简化成StringProcess sp = SayHello,这样就可以像调用普通函数一样把sp当成函数用了。

整数可以用整数变量指向它,对象可以用对象变量指向它,函数也可以用委托变量指向它。
使用委托和直接调用函数的区别:用委托就可以指向任意的函数,哪怕是之前没定义的都可以。
 
委托的本质:
委托都继承自System.MulticastDelegate,而System.MulticastDelegate又继承自System.Delegate
多播委托(MulticastDelegate):有一个委托数组,依次调用。
委托( System.MulticastDelegate )的3个重要成员:
其中_methodPtr、_target来自Delegate类,_invocationList来自MulticastDelegate类,实际上是Delegate[]类型。
 
 
委托的作用:
•占位,在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定)。在实际调用之前,需要为委托赋值,否则为null。
 
 
 
原文地址:https://www.cnblogs.com/chay1227/p/2973553.html