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#里面具体 的方法的概念,特别把这些容易 混淆的知识点整理一下,以作备忘。

  • 相关阅读:
    Vi 和 Vim
    The C Programming Language-Chapter 5 Pointers and Arrays
    C# 4.0开始,泛型接口和泛型委托都支持协变和逆变
    数据库中的锁 and java StampedLock ReadWriteLock
    NetCore and ElasticSearch 7.5
    网关项目 ReverseProxy
    异常捕获&打印异常信息
    刷新:重新发现.NET与未来
    2019 中国.NET 开发者峰会正式启动
    .NET开发者必须学习.NET Core
  • 原文地址:https://www.cnblogs.com/ProjectDD/p/10921156.html
Copyright © 2011-2022 走看看