zoukankan      html  css  js  c++  java
  • C# 表达式树的重要意义

    linq就是表达式树的最重要价值的体现

    因为 可以通过 lambda表达式,直接转换为 expression tree所以,通过linq 所构造 的连式lambda就可以构造任意复杂的算法数据结构

    而对这个算法数据结构的,解析,和翻译将可以帮助 实现 跨语言的算法 平移,比如 linq to sql这一类的应用,

    可以把算法做为存储结构固定下来,这样我们可以把算法保存在Expression里面,比如存入数据库,提取出来在不同的平台不同的语言都

    可以使用,只要采取相应的解析翻译算法就可以了

    经过对它的一段时间学习,我了解到一个重要的容易混淆的地方

    Expression 不是表达式树,表达式树的转化主要是针对一句话或一句话之类的事情 所做的,对一句C# 转换为一个树结构数据

    而Expression的所有派生类,和由它的表达方法所进行的编程不是表达式树的编程,而是面向比C#更底一层的指令接口的编程,我猜测就是

    面向IL 的编程因为C#编译后 就成为IL代码,当然现在可能更优化aot之类,可能将一部分编译成二进制,更具性能,这方面具体我没研究过

    总之Expression 非常类型Emit Emit就是直接 使用IL指令进行编程,它的最主要用途就是编译一个动态方法 ,恰好Expression 的主要作用

    也是如此 ,可以把Expression编程看作是对Emit的一个简单的基于oo的封装,它们直接针对的更低层语言(IL)的接口,比如 Expression里面

    没有while,for foreach,等种种循环,就是一个Expression.Loop(...) 就完了,类似还有Block 这个也有传入传出,和方法相似,但没有C#里面具体 的方法的概念,特别把这些容易 混淆的知识点整理一下,以作备忘。

  • 相关阅读:
    JVM的学习5_____垃圾回收:分代收集算法
    JVM的学习4____GC的作用和垃圾的标记
    JVM的学习3_____逃逸分析与栈上分配
    JVM的学习2____对象实例的内存分配原理
    JVM的学习1_____内存模型
    SpringMVC的学习____6.JSON 和Ajax
    两种方法关联控制器和DOM
    img的src,a的href使用{{}}设置属性不能生效
    ng之{{value}}顺序
    ng之ng-app指令
  • 原文地址:https://www.cnblogs.com/ProjectDD/p/10921156.html
Copyright © 2011-2022 走看看