首页 > 其他分享 >DLR 的扩展库 Dynamitey

DLR 的扩展库 Dynamitey

时间:2022-11-27 21:44:07浏览次数:49  
标签:Dynamitey 开发人员 扩展 DLR 编译器 调用 动态

.NET 在 CLR 对动态语言或者脚本语言的支持是通过DLR 完成的, Miguel de Icaza对 DLR 的特点概括如下

  • 一个针对动态语言的共享式类型系统;
  • 一个共享的 AST,可以被语言开发人员用来创建新的动态语言;
  • 针对编译器开发人员的辅助 / 工具类;
  • 一个通用的宿主接口,从而可以将通用脚本语言的接口嵌入你的程序中,并且允许开发人员用一种货多种动态语言扩展系统;
  • 控制台支持,DLR 甚至提供了一个简单的控制台接口,用于进行交互式编程。

有了DLR,从c# 4.0开始,反射是不必要的,因为DLR可以使用运行时类型进行调用。由于动态使用DLR库很麻烦(而不是C#编译器为您生成代码),因此开源框架Dynamitey(https://github.com/ekonbenefits/dynamitey)使您可以轻松地缓存运行时访问编译器将生成的相同调用。

Dynamitey 是一个实用程序库,提供对 DLR 的扩展,包括:

  • 基于DLR的简单快速反射,它包装了DLR API,使得通过名称动态调用方法变得更加简单,适用于动态和poco对象。 比poco对象的反射更快。

  • 用于使用后期绑定库中类型的干净语法

  • 动态柯里化

  • 元组的操作

Dynamitey 可以像dynamic关键字那样调用它,但是使用字符串作为属性名,而不是由编译器为您代劳,就是把对一个对象的反射调用转变成对一个dynamic对象的直接调用:

Dynamic.InvokeGet(d,"value2");

Dynamic.InvokeSet(d, value2, value);

标签:Dynamitey,开发人员,扩展,DLR,编译器,调用,动态
From: https://www.cnblogs.com/shanyou/p/16928410.html

相关文章

  • 第7章-Spring的Bean生命周期和扩展点
    目录一、生命周期二、Bean的扩展1.专用扩展点2.通用扩展点3.生命周期扩展点示例3.1实例化3.2属性填充3.2初始化3.4销毁4.生命周期扩展点顺序三、附录1.配置属性2......
  • Spring之可扩展点
    一、SpringBean的生命周期    二、后置处理器postProcessor 一个是针对BeanDefinition的容器级别的后处理器-BeanFactoryPostProcessor一个是针对getBean......
  • 接口的扩展。
    今天给大家介绍一些有关扩展方法的一些知识,主要讲解一下在C#3.0中使用扩展方法来扩展接口。1、扩展方法跟原来类的方法重名时候的处理逻辑2、扩展方法的嵌套现......
  • string 类的扩展方法
     ​​string类的扩展方法​​string类的扩展方法列表(基本相同于IEnumerable<T>接口的成员列表):Aggregate<>//累加All<>//是否都满......
  • abap-BAPI_MATERIAL_SAVEDATA 扩展字段的使用
    事情原由:需要用jco来调用 BAPI_MATERIAL_SAVEDATA创建物料,但是发现有个可配置栏位,没有地方传入这个bapi.imports和tables里都没办法将这个字段传入,检查了一下......
  • 如何扩展 Mac mini 2018 内存条 All In One
    如何扩展Macmini2018内存条AllInOne升级Macmini(2018年)的内存https://support.apple.com/en-us/HT205041#onehttps://support.apple.com/zh-cn/HT205041#on......
  • 扩展
    01-MySQL主从搭建基于docker02-django项目实现读写分离03-CGI,FastCGI,WSGI,uWSGI,uwsgi一文搞懂04-Rabbitmq入门到精通05-python中使用rpc框架......
  • ES6对象的扩展
    对象中可以直接写变量ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。constfoo='bar';constobj={foo};//key值就是foo,value值是foo变量对应的值//......
  • 2. redis扩展知识
    管道(pipeline)比如说客户端连接到redis服务端以后,要进行很多命令的操作,每次执行命令都会经过网络io然后调用到redis服务端,管道的技术可以把多个命令进行压缩,这样一次调用就......
  • ES6对象的扩展
    对象中可以直接写变量ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。constfoo='bar';constobj={foo};//key值就是foo,value值是foo变量对应的值......