第七章 委托和事件
1.委托
a) 理解委托的一个好方式就是把委托当做给方法签名和返回类型指定名称
b)匿名方法
ex:
static void Main()
{
string mid = ", middle part,";
delegate string dlegateTest(string val);
delegateTest anonDel= delegate(string param)
{
param += mid;
param += "and this was added to the string;
return param;
}
}
使用匿名方法必须遵循:
方法中不能使用跳转语句跳到该方法的外部,反之亦然;
方法内部不能访问不安全的代码
不能访问在方法外部使用的ref和out参数,但可以使用在匿名方法外部定义的其他变量。
2.λ表达式
λ 运算符 =>
左边列出了匿名方法需要的参数。有以下几种编写方法
1.在括号中定义类型和变量名 (string param)
2. 不需要类型 (param)
3. 只有一个参数,可以删除括号 param
右边列出了实现代码
如果实现代码只有一行,可是删除花括号和return语句。
ex: public delegate bool Predicate(int obj)
Predicate p1=x => x>5;
3 协变和抗变
a) 返回类型协变
返回类型可以派生于委托定义的类型
b)参数类型抗变
参数类型可以派生于委托定义的类型
4 事件
一直搞不清楚事件和委托的区别。下面这段话大概会有些启发
实际上从内部实现来说,event都可以通过delegate来完成。
但从编程的角度来说,event强调了事件。通过订阅事件来获得通知,使一种程序员容易理解和交流的模式。
而delegate则泛指符合某种格式的函数,比如可以传入一个比较函数来进行自定义排序。