Basic_grammer_Delegate
2018-04-30 10:04:45
- 委托
- 委托 与 策略模式, 组合模式 , 匿名函数,闭包。
- 委托和事件
委托 delegate
- 是一种类型 Type.
- 其声明 由 关键字 delegate + 返回类型 + 委托名 +(参数列表) 组成。
- 用于在运行时确定使用的方法列表。可以是实例方法,也可以是静态方法。
- 委托里的方法列表,会对从初始传入的参数均执行一遍,该值按顺序改变。如果有返回值则是最后一个方法的返回。
组合委托 两个委托 MyDel delC = delA + delB ,最终会创建一个新的委托,原始的 A 和 B 不改变,创建了新的副本赋值。
用法:
- 委托的返回类型,参数类型,数量 要与方法一致。
匿名方法
不需要命名,减少了命名冲突。
匿名方法关键词 : 外部变量,在方法作用域之外的变量; capture 方法捕获。

lambda 表达式 替代了匿名方法
注意 如果委托有 ref 和 out 修饰符的时候, 不能省略 类型修饰符。
无参数时,不能省略括号。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace DelegateDemo 8 { 9 delegate int Mydel(int val); // declare a delegate type 10 class DelegateDemo 11 { 12 int DemoM(int x) 13 { 14 return x + 1; 15 } 16 17 public static int S_DemoM(int x) 18 { 19 return x + 3; 20 } 21 22 static void Main() 23 { 24 DelegateDemo dd = new DelegateDemo(); 25 26 Mydel del1 = new Mydel(dd.DemoM); 27 28 del1 += S_DemoM; // 给委托添加方法 29 del1 -= S_DemoM; // 注意 删除的时候从方法列表的最后面开始匹配。 30 31 Mydel del2 = dd.DemoM; // Compiler inferred [int] type parameters; 32 33 Mydel del3 = del1 + del2; // 组合委托 Componet delegate 34 35 Mydel del4 = (int x) => { return x + 3; }; 36 37 // 委托有 ref,out 参数,必须注明类型。 38 39 Mydel del5 = x => x + 3; // 类型推断。type inference 40 41 // 空委托会异常,和null比较来判断委托的调用列表是否为空。 42 if (del5 != null) 43 del5(3); 44 45 } 46 } 47 }

浙公网安备 33010602011771号