首页/技术分享

二次开发教程:Emit DynamicMethod

发布于:2019-07-24 16:35:59
3321人 分享

使用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;

        }

 

    }

转载请注明来源本文地址:https://www.tuituisoft/blog/3173.html

上一篇:

二次开发教程:Emit 循环

下一篇:

二次开发教程:Hello Emit