完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
* 主體類型
* 企業(yè)名稱
* 信用代碼
* 所在行業(yè)
* 企業(yè)規(guī)模
* 所在職位
* 姓名
* 所在行業(yè)
* 學(xué)歷
* 工作性質(zhì)
請先選擇行業(yè)
您還可以選擇以下福利:
行業(yè)福利,領(lǐng)完即止!

下載app免費(fèi)領(lǐng)取會(huì)員

NULL

ad.jpg

二次開發(fā)教程:Emit DynamicMethod

發(fā)布于:2019-07-24 16:35:59

網(wǎng)友投稿

更多

使用Emit動(dòng)態(tài)生成一個(gè)計(jì)算兩個(gè)int和的方法,


int Add(int i,int j)

{

    return i + j;

}

實(shí)現(xiàn)如下:


    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;

        }

 

    }

本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

未標(biāo)題-1.jpg

上一篇:二次開發(fā)教程:Emit 循環(huán)

下一篇:二次開發(fā)教程:Hello Emit

60acb4e0ef112.png