委拖 lambda 匿名方法 匿名类 扩展方法
1. 委托的声明
public delegate void NoReturnNoParam(); |
委托的声明: delegate [返回类型] 委托类型名 (参数1, 参数2)
委托是一种类型;
2. 委托的实例化
NoReturnNoParam method1 = new NoReturnNoParam(this.DoNothing); |
委托的实例化:
1. 通过new 构造一个委托实例,参数是:方法(名)或lambda表达式;
2. 直接给委托的变量赋值一个方法(名)或lambada表达式;
在给委托实例化的时候,一定要注意:用来实例化委托的方法的签名(返回值类型,参数类型和顺序都必须一致)必须和委托的声明是一致;
3. 委托的调用
method1.Invoke(); |
委托的调用:
1. 通过委托实例的Invoke方法调用;
2. 将委托当成方法一样,直接在实例名后加上括号和参数直接调用;
4. 匿名方法
WithReturnNoParam method5 = new WithReturnNoParam(delegate () |
5. lambda表达式
将匿名方法的delete去掉,在参数列表后加上”=>”(goes to)
WithReturnNoParam method7 = new WithReturnNoParam(() => { return 100; }); NoReturnWithParam method10 = (string name, int age) => { Console.WriteLine($"name:{name}, age:{age}"); }; |
6. 系统自带的委托
Action : 没有返回值的委托,参数最多16个
Func: 带返回值 的委托,参数最多16个;Func的泛型的最后一个可变类型参数是返回类型
Action act1 = () => Console.WriteLine("Do nothing"); Func<int> func1 = () => 100; |
7. 匿名类 var
object user = new |
var 关键字可以接收返回任意类型的结果或表达式的结果,前提类型可由编译器推导出;
var只能声明局部变量,不能是字段,也不能是静态属性;
var声明的时候必须被初始化;
8. 扩展方法
静态类,静态方法的第一个参数前加上this关键字,这个参数所在的类型将都会扩展此方法,可像成员方法一样去调用,如:
public static class ExtendShow } int? i = null; |
在不修改第三方类库封装的情况下,给类型额外的扩展一个方法;
如果跟实例方法相同,则优先调用实例方法;