作者:121飒飒 | 来源:互联网 | 2023-02-01 22:17
什么是委托?可以认为委托是持有一个或多个方法的对象。但委托和典型的对象不同,可以执行委托,这时委托会执行它所持有的方法。委托和类一样,是一种用户自定义的类型。但类表示的是数据和方
什么是委托?
可以认为委托是持有一个或多个方法的对象。但委托和典型的对象不同,可以执行委托,这时委托会执行它所持有的方法。
委托和类一样,是一种用户自定义的类型。但类表示的是数据和方法的集合,而委托是持有一个或多个方法,及一系列预定义操作。
(1)声明一个委托类型,但是没有实现块
(2)使用该委托类型声明一个委托变量
(3)创建委托类型的对象,把它赋值给委托变量。新的委托对象包括指向某个方法的引用。
(4)可以选择为委托对象增加其他方法。这些方法必须与第一步中定义的委托类型有相同的签名和返回类型。
(5)在代码中你可以像调用方法一样调用委托。
声明委托:
delegate void MyDel ( int x );
委托类型的声明看上去与方法很相似,有返回类型和签名。返回类型和签名指定了委托接受的方法的形式。上面的MyDel类型的委托只会接受不返回值并且有单个int参数的方法。
声明委托变量和创建委托对象:
MyDel delVar; //声明委托变量
delVar = new MyDel ( myInstObj.MyM1 );//实例方法,简写可以把new去掉
dVar = new MyDel (SClass.OtherM2 );//静态方法,简写可以把new去掉
组合委托:就是创建了三个委托,但是第三个委托是由前两个委托组合成的。
为委托添加方法:
使用 += 运算符。
从委托移除方法:
使用 -= 运算符
调用委托:
delVar (...);
匿名方法:允许我们避免使用独立的具体方法。
是在初始化委托时内联声明的方法。
·delegate关键字
·参数列表
·语句块
返回类型:
返回值必须是与委托返回类型相同的值。
参数:
匿名方法的参数列表有三个方面要与委托相匹配:
·参数数量
·参数类型及位置
·修饰符
我们可以通过圆括号为空或者省略圆括号来简化匿名方法的参数列表,但要满足两个条件:
·委托的参数列表不包含out参数
·匿名方法不使用任何参数
params参数:
委托声明的参数列表包括了params参数,那么匿名方法中将忽略掉params关键字。