您的位置:首页 > 编程语言 > C#

C#-表达式树

2016-03-27 16:47 274 查看
表达式树

Expression Tress 表示树状数据结构的代码

应该是不可变的,要修改某个表达式树,则必须通过复制现有的表达式树并替换其中的节点来构造一个新的表达式树

二叉树

Binary expression tree

树状结构的每个节点都是一个表达式

the expression tree is an inmemory data representation of the lambda expression ---msdn

优点:

1.可动态修改可执行代码

2.动态执行各个数据库中的LINQ查询

3.创建动态查询

4.表达式树还可在动态语言运行时DLR中用来提供动态语言和.NET Framework之间的互操作性

用法

1.匿名lambda表达式让编辑器创建表达式树

2.使用System.linq.expressions命名空间手动创建表达式树

3.Expression<TDelegate> : LambdaExpression

Expression类型创建表达式树

1.在system.linq.expressions命名空间中定义

2.若要使用Expresstion类创建表达式树,类静态工厂方法 ParameterExpression(表示一个变量或参数),MethodCallExpression(表示一个方法调用),ParameterExpression、MethodCallExpression这些类型派生自抽象类型Expression

在.net4.0中,表达式树API还支持赋值和控制流表达式(如循环、条件和try--catch块,可以使用expression更复杂的表达式树)

面试题:

匿名类型是什么

dynamic是什么

var是什么

他们的区别是什么

早绑定和晚绑定区别

晚绑定的实现方式有哪些?

早绑定:Early Binding

静态绑定:static Binding

迟绑定:Late binding ,别名 dynamic binding 动态绑定 ,在CLR去顶变量的类型

迟绑定的实现方式:

1.反射 动态创建类型实例

2.Dynamic 类型

早绑定晚绑定
1.效率高1.效率低
2.智能提示2.无法提示
3.类型检查3.无法检查
4.不能改变类型4.可以改变类型
5.死板5.灵活
C#4.0引入了dynamic,一种静态类型,但是会跳过类型检查

DLR 是 .NET4.0中的一个新API,目的是允许动态语言系统在.NET上运行,并为动态语言提供.NET互操作性

DLR 是一种运行时环境,将一组适用于动态语言的服务添加到CLR

动态语言(js,python,php等)可以在CLR标识对象的类型:





DLR提供了Dynamic类型的基础结构,还提供了诸如IronPython和IronRuby等动态编程语言的实现

DLR的代码可以从codeplex网站下载



来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: