博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#-表达式树
阅读量:5161 次
发布时间:2019-06-13

本文共 1295 字,大约阅读时间需要 4 分钟。

表达式树

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标识对象的类型:

1 034.png

1 035.png

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

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

1 037.png

转载于:https://www.cnblogs.com/weloveshare/p/a466efbfc4d1b6faa914c2e5a161f1cd.html

你可能感兴趣的文章
记一次高并发场景下.net监控程序数据上报的性能调优
查看>>
QT中Qtableview视图表格中点击表头进行排序
查看>>
Python Day23
查看>>
windows控制台(console)乱码
查看>>
[Android]通知栏与操作栏的高度-State Bar & Navigation Bar
查看>>
第三次作业
查看>>
关于NX Check_Mate功能外部开发心得
查看>>
复制虚拟机vmware centos搭建集群节点过程中网络配置eth0和eth1遇到的问题以及NAT模式下虚拟机静态IP配置方法...
查看>>
mysql_数据库_操作
查看>>
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
查看>>
AngularJS入门之动画
查看>>
获取子元素在父元素中的下标
查看>>
TextBox 绑定到DataTable某一列属性上
查看>>
背包九讲
查看>>
android 学习资源网址
查看>>
shell基础
查看>>
2018.1.15
查看>>
[集合DP] UVA 10651 Pebble Solitaire
查看>>
测试成长之路
查看>>
jquary常见问题总结
查看>>