委托:
委托数据类型:
由CRL托管,CRL创建和释放。引用类型,值类型
非委托数据类型:
手动创建和释放,Stream(字节流),StreamReader(读字节流)
概念:
可以将一个方法作为参数使用,这种将方法动态赋给参数的做法。
委托本质就是一个类,继承自System.MulticastDelegate,内置了3个方法:Invoke();BeginInvoke();EndInvoke();
继承关系:System.MulticastDelegate->Delegate->object
使用过程中便于理解,把委托理解成函数指针,即一个指向函数的指针,通过指针调用函数。
意义:
解耦:
减少重复代码
接触判断逻辑和逻辑之间的耦合
委托传递的是逻辑(方法)
异步多线程
多播委托:
+=为委托实例按顺序增加方法,形成方法链,Invoke()时按顺序执行
-=为委托实例移除方法,从方法 链尾部开始匹配,遇到第一个完全吻合的移除,且只移除一个,没有的也不异常带返回值
一个委托名绑定多个方法,Invoke()时按绑定顺序(+=)顺序执行
委托类型有:无返回值Action泛型委托,有返回值Func泛型委托,返回值bool值Predicate泛型委托,自定义委托Delegate
事件:
事件是带event关键字的委托的实例
事件可以限制变量外部调用,或者直接赋值
事件可以把一些列的行为封装,交给第三方执行