1. 委托是什么?
(1) 从数据结构来讲,委托是和类一样是一种用户自定义类型。
(2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象。概括的说:委托是方法的抽象。
2. 委托类型的定义:
委托是类型,就好像类是类型一样。与类一样,委托类型必须在被用来创建变量以及类型对象之前声明。
委托类型声明:
(1) 以deleagate关键字开头。
(2)返回类型+委托类型名+参数列表。
3. 声明委托变量
wdd wdd1,wdd2;
4. 初始化委托变量
(1) 使用new运算符
new运算符的操作数的组成如下:
-
- 委托类型名
- 一组圆括号,其中包含作为调用列表中的第一个成员的方法的名字。方法可以是实例方法或静态方法。
- class Program
{
delegate int delA(int i,int j);
static void Main(string[] args)
{
delA d = say;
Console.WriteLine(d(6,8));
Console.ReadKey();
}
public static int say(int y,int z)
{
return y + z;
}
}
6. 组合委托
委托可以使用额外的运算符来组合。这个运算最终会创建一个新的委托,其调用列表是两个操作数的委托调用列表的副本的连接。委托是恒定的,
操作数委托创建后不会被改变。委托组合拷贝的是操作数的副本。
delA d = say;
delA b = say;
delA c = d + b;
Console.WriteLine(c(d(1,2),b(1,3)));
7. 委托加减运算
可以使用+=运算符,为委托新增方法。
同样可以使用-=运算符,为委托移除方法。
8. 委托调用
委托调用跟方法调用类似。委托调用后,调用列表的每个方法将会被执行。
在调用委托前,应判断委托是否为空。调用空委托会抛出异常。
9. 匿名方法
匿名方法是在初始化委托时内联声明的方法。
从上面我们可以看到,匿名方法是不会显示声明返回值的。
10. Lambda表达式
Lambda表达式主要用来简化匿名方法的语法。在匿名方法中,delegate关键字有点多余,因为编译器已经知道我们将方法赋值给委托。
通过几个简单步骤,我们就可以将匿名方法转换为Lambda表达式:
1.删除delegate关键字
2.在参数列表和匿名方法主体之间防Lambda运算符=>。Lambda运算符读作"goes to"。