委托
委托是一个类,它定义了方法的类型,使得方法可以当做另一种方法的参数传递,就是方法的参数是一个委托变量,在调用此方法时,就可以把一个方法作为参数传递给委托变量。
1.创建委托访问修饰符 delegate 返回值类型 委托名(参数列表); 没有大括号
2.委托赋值 委托名 委托变量 = 方法名; 没有大小括号这个方法的参数和返回值类型 必须要和委托类型一致。
3.使用委托委托变量(参数列表);静态方法和普通方法都可以绑定
4.多播委托给委托绑定多个方法(方法类型必须一致) 使用 += 解除使用 -=委托名 委托变量 = 方法1;委托变量 += 方法2;使用多播委托绑定无返回值的方法时,会把绑定的方法都执行一次。使用多播委托绑定有返回值的方法是,也会将方法都执行一次,但是会覆盖第一个方法执行的结果,返回最后绑定方法的结果。
5.内置委托Action无返回值的委托 表示委托类型的参数类型是 T,T1....Func有返回值的委托 表示委托类型的参数类型是 T,T1,T2... 返回值类型是P
6.ref out 关键字
这些不能用在内置委托中,必须放在自定义的一般委托中
7.匿名方法
委托类型 委托变量 = delegate(参数列表){ 方法体; 有返回值要return; };
后面一定要加分号,因为这是一个赋值语句
8.Lambda表达式
委托类型 委托变量 = (参数列表)=> { 方法体; 有返回值要return; };
后面一定要加分号,因为这是一个赋值语句
事件
在创建委托变量的时候用event修饰 那么就是一个事件
委托与事件的区别:
委托可以声明为类成员 也可以是局部变量
事件只能是类成员
事件在类的外部访问时只能出现在 += 注册 或者 - =注销的左边 不能像使用委托那样直接执行
事件必须在所在的类里面才可以执行