彩世界开奖app官网-彩世界平台官方网址(彩票平台)
做最好的网站
来自 计算机编程 2019-11-28 06:28 的文章
当前位置: 彩世界开奖app官网 > 计算机编程 > 正文

Emit学习(1) - HelloWorld彩世界开奖app官网

static void Main(string[] args)
        {
            //1.构建程序集
            var asmName = new AssemblyName("Test");
            var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);

            //2.创建模块
            var mdlBldr = asmBuilder.DefineDynamicModule("Elvinle", "Elvinle.exe");

            //3.定义类
            var typeBldr = mdlBldr.DefineType("Hello", TypeAttributes.Public);

            //4.定义类成员(方法,属性等等)
            //public void SayHello(){}
            var methodBldr = typeBldr.DefineMethod("SayHello", MethodAttributes.Public | MethodAttributes.Static, null, null);

            //5.构建方法体
            //获取il生成器 
            var il = methodBldr.GetILGenerator();
            il.Emit(OpCodes.Ldstr, "Hello, HelloWorld!");
            il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }));
            il.Emit(OpCodes.Call, typeof(Console).GetMethod("ReadLine"));
            il.Emit(OpCodes.Pop);//读入的值会被推送至evaluation stack,而本方法是没有返回值的,因此,需要将栈上的值抛弃 
            il.Emit(OpCodes.Ret);

            //调用CreateType来完成类型的创建
            var t = typeBldr.CreateType();
            //设置入口点为SayHello(), -- 相当于Main()
            asmBuilder.SetEntryPoint(t.GetMethod("SayHello"));
            asmBuilder.Save("Elvinle.exe");
        }

 

二、小示例

     3 . 工具插件及IDE的付出等。 

Emit的运用情形了,经常我们在上边二种情景时得以接受采用Emit来完成: 

 

以下部分转发自 :  (若侵犯版权, 请与自家关系, 删除此部分内容)

    2. 在程序集内创立三个模块。 

选取Emit常用的多少个类如下:

     2 .延迟绑定对象的行使。

     5.   减弱反射的属性损失。

由于早前计算机vs安装的是斯洛伐克共和国(The Slovak Republic卡塔 尔(阿拉伯语:قطر‎语版的, 对于一些OpCodes指令, 有大器晚成都部队分看的不是很懂, 所以附上一个中文版的啊

早先看过Dapper(使用到了Emit), CYQ.Data(另风姿浪漫种思路,未有动用Emit)类的框架之后, 也想自个儿做二个小框架玩一下, 然则那时候技艺太过欠缺, 做不了Cyq.Data或然PDF.Net此类的框架, 所以起头了学习之路. 先制定多少个能达到规定的规范的小目的呢, 从Emit早前. 

彩世界开奖app官网 1

以下一些转发自 :   (若侵害版权, 请与自己联络, 删除此部分故事情节)

地址: 

    3. 在模块内创立动态类。 

类名 用途
AssemblyBuilder  用来定义和创建动态的程序集
ConstructorBuilder  用来创建动态类的构造函数
CustomAttributeBuilder   用来创建用户自定义的特性
MethodBuilder        用来创建动态类的方法,也可创建构造函数,因为构造函数本身也是一个特殊的方法
ModuleBuilder    用来创建动态程序集中的模块
TypeBuilder    用来定义和创建动态类的新实例
DynamicMethod   用来创建可动态编译和执行的动态方法
ILGenerator         用来生成中间语言,即MSIL指令
OpCodes  提供 Microsoft 中间语言 (MSIL) 指令的字段表示形式

   

     1.  运作中动态的始建项目、模块等,同一时候又须求提升作用(能够动态编写翻译二次,然后就绝不再管理了卡塔 尔(阿拉伯语:قطر‎.

结果如下:

 

想必过五个人还不知道Emit是个什么样鬼, 可是风闻过EmitMapper的一定有过多, Emit的概念, 小编这边就少之又少说了, 能够看一下别人的博文(下边包车型大巴链接里面就有)

   

三、指令明细, 有一些相似 汇编 

 

     4.   ORM的实现。

    1. 创设五个顺序集。 

 

Emit学习(1) - HelloWorld彩世界开奖app官网。Emit学习(1) - HelloWorld彩世界开奖app官网。    5. 变迁相关的IL代码。

第一来看下使用Emit的貌似步骤: 

    6. 重返创立的花色只怕悠久化保存到硬盘中。

 

风流倜傥、使用意况

Emit学习(1) - HelloWorld彩世界开奖app官网。 

    4. 为动态类增添动态方法,属性,事件,等等。 

本文由彩世界开奖app官网发布于计算机编程,转载请注明出处:Emit学习(1) - HelloWorld彩世界开奖app官网

关键词: