- A+
一、概念
委托的本质也是一种类型,类似于Class这样。作用是将一个方法作为参数传递给另一个方法,关键字是delegate
二、委托的定义使用步骤
第一步声明委托:
public delegate int myDelegate(int a, int b);
1、声明一个委托类型,可以用访问修饰符修饰public、private等,要有delegate关键字,可以有返回值和参数
2、委托所指向的函数必须跟委托具有相同的签名,即相同的参数列表和返回值类型
第二步实例化委托并绑定方法:
myDelegate del1=new myDelegate( toAdd );//只写方法名,不带括号和参数列表
或者:
myDelegate del1 =toAdd;
第三步执行委托:
del1( 3 , 4 );//括号为参数列表
第四步写绑定的方法:
1、方法必须为static静态方法
2、方法必须有和所绑定委托一致的签名,即相同的参数列表和返回值类型
如下:
static public int toAdd(int a, int b)//参数列表与委托定义必须一致
{
return a + b;//返回类型与委托定义必须一致
}
三、泛型委托(微软内置委托)
实际上微软已定义好一套泛型委托供我们使用,以免繁琐重复定义,它们分别是Action,Func和Predicate
Action: 此委托绑定的方法不能有返回值,方法可以有至多16个参数;
Func : 此委托绑定的方法可以有返回值。方法可以有至多16个参数;
Predicate: 此委托返回值为布尔型,方法只能又一个参数;
四、匿名委托
可以理解为省略了方法定义这步来调用委托。即没有函数名,直接方法体。其中还可以使用lambda表达式来进一步简化代码量和提高执行效率
五、委托与线程的关系
委托与线程的关系就是没有关系。很多初学者容易把委托理解为启动新线程的一种方式,实际上他们之间没有关系。比如在主线程里调用开始执行一个委托,则主线程就会进入这个委托进行执行,只到委托中的代码执行完毕再返回主线程继续执行后面的代码。