.NET学习笔记

 

20190527 委托课程

/// 1 委托的声明、实例化和调用
/// 2 泛型委托--Func Action
/// 3 委托的意义:解耦
/// 4 委托的意义:异步多线程
/// 5 委托的意义:多播委托
/// 6 事件,观察者模式
//异步调用
+= 多播委托 为委托实例按顺序增加方法,形成方法链 Invoke 时,依次执行
== 从方法链尾部开始匹配,遇到吻合的移除
多播委托不能异步调用
多播委托带返回值,结果以最后的为准
一个变量保存多个方法,可以增减; Invoke时可以按顺序执行
委托事件
带event关键字的委托的实例,限制变量被外部调用或赋值,子类也不能调用;只有声明类内部才能调用
委托与事件的区别和联系?
委托是一个类型,事件是委托的实例
观察者模式
事件可以把一堆可变的动作封装出去,交给第三方来指定
事件:一部分是固定的,一部分是可变的,都预定义好,通过一个事件去开房接口,外部可以随意扩展动作
框架:完成固定/通用部分,把可变部分留出扩展点,支持自定义
 

20190528 Lambda 表达式 Linq 课程

1.0 1.1 委托声明
2.0 时代增加 匿名方法
3.0 Lambda 去掉关键字 ()=> goes to 左边是参数列表,右边是方法体 本质就是一个方法
可以省略参数类型,编译器自动推算,要么都声明,要么都不声明
可以去掉{ },如果方法体只有一行,可以去掉{ };
实际是一个类中类,中的internal方法,绑定到静态委托类型字段
匿名类在编译之后是有一个真实的类,只能读取,不能赋值
var 就是一个语法糖,由编译器自动推算,必须在声明的时候就确定类型,确定类型后不能修改其类型
扩展方法 增加方法且不能修改类,静态类的静态方法,第一个参数前加个this
用途:不修改类型而增加方法,指定类型扩展,不要对基类型,如果是泛型,需加上约束,如果有相同名称扩展方法,编译器会提示“”
缺陷:优先调用实例方法(有隐患)
只有扩展方法,没有扩展属性
1.基于委托解耦
2.加入泛型
3.加入迭代器 (yield),按需获取
Linq to Object (Enumerable)内存中处理
Linq to Sql (Queryable)表达式目录树解析sql
Linq to Xml
Linq to Everying……
查询表达式
from
where
select
 

20190529 表达式目录树课程

相比于委托,表达式目录树是一种数据结构,只能有一行
Compile() 方法,编译为委托
写一段Lambda表达式之后反编译,可以看到完整的代码计算
表达式目录树用途:用来替代反射,反射虽可以通用,但性能不够;动态生成硬委托(编码),可以提升性能
ExpressionVisitor:解析表达式目录树
只有一个入口:Visit
递归解析
首先检查是什么类型的表达式,然后调用相应的Protected Virtual方法解析
得到结果继续解析,一直递归解析下去
二叉树
 

posted on 2023-03-17 14:24  dysjwang  阅读(12)  评论(0编辑  收藏  举报

导航