完善主体资料,免费赠送VIP会员!
* 主体类型
* 企业名称
* 信用代码
* 所在行业
* 企业规模
* 所在职位
* 姓名
* 所在行业
* 学历
* 工作性质
请先选择行业
您还可以选择以下福利:
行业福利,领完即止!

下载app免费领取会员

NULL

ad.jpg

二次开发教程:Emit DynamicMethod

发布于:2019-07-24 16:35:59

网友投稿

更多

使用Emit动态生成一个计算两个int和的方法,


int Add(int i,int j)

{

    return i + j;

}

实现如下:


    class Program

    {

        static void Main(string[] args)

        {

            var func = GetAdd();

            Console.WriteLine(func(1, 2));

            Console.ReadLine();

        }

 

        static Func<int,int,int> GetAdd()

        {

            Func<int, int, int> add = null;

            

            DynamicMethod dynamicMethod = new DynamicMethod("Add", typeof(int), new Type[] { typeof(int), typeof(int) });

            var iLGenerator = dynamicMethod.GetILGenerator();

            dynamicMethod.DefineParameter(1, System.Reflection.ParameterAttributes.In, "i");//Ldarg_0

            dynamicMethod.DefineParameter(1, System.Reflection.ParameterAttributes.In, "j");//Ldarg_1

 

            iLGenerator.Emit(OpCodes.Nop);

            iLGenerator.Emit(OpCodes.Ldarg_0);

            iLGenerator.Emit(OpCodes.Ldarg_1);

            iLGenerator.Emit(OpCodes.Add);

            iLGenerator.Emit(OpCodes.Ret);

            add = (Func<int, int, int>)dynamicMethod.CreateDelegate(typeof(Func<int, int, int>));

            return add;

        }

 

    }

本文版权归腿腿教学网及原创作者所有,未经授权,谢绝转载。

未标题-1.jpg

上一篇:二次开发教程:Emit 循环

下一篇:二次开发教程:Hello Emit

60acb4e0ef112.png