91手机视频在线-91手机视频在线观看-91手机在线-91手机在线播放-91手机在线观看

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

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

NULL

ad.jpg

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

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

網(wǎng)友投稿

更多

目的是用Emit 生成一個(gè)和TargetMethod(代碼如下) 一樣的方法


實(shí)現(xiàn)


    class Program

    {

        static void Main(string[] args)

        {

 

            var method = GetTargetMethod();

            method();

 

            Console.ReadLine();

        }

 

        static void TargetMethod()

        {

            for (int i = 0; i < 10; i++)

            {

                Console.WriteLine(i);

            }

        }

 

        static Action GetTargetMethod()

        {

            DynamicMethod dynamicMethod = new DynamicMethod("test", null, null);

            var iLGenerator = dynamicMethod.GetILGenerator();

            iLGenerator.DeclareLocal(typeof(int));//ldloc.0 表示i

            iLGenerator.DeclareLocal(typeof(bool));//ldloc.1 表示i和10 比較的結(jié)果

 

            var IL_0012 = iLGenerator.DefineLabel();

            var IL_0005 = iLGenerator.DefineLabel();

 

            var writeLine = GetWriteLine();

 

            iLGenerator.Emit(OpCodes.Nop);

            iLGenerator.Emit(OpCodes.Ldc_I4_0);//0

            iLGenerator.Emit(OpCodes.Stloc_0);//將 ldloc.0: i 設(shè)置為0

 

            iLGenerator.Emit(OpCodes.Br_S, IL_0012);//跳轉(zhuǎn)到Label IL_0012

 

            iLGenerator.MarkLabel(IL_0005);//添加標(biāo)簽 IL_0005

            iLGenerator.Emit(OpCodes.Nop);

 

            iLGenerator.Emit(OpCodes.Ldloc_0);//將 ldloc.0: i 放入計(jì)算堆棧

            iLGenerator.Emit(OpCodes.Call, writeLine);//調(diào)用Console.WriteLine 

            iLGenerator.Emit(OpCodes.Nop);

 

            iLGenerator.Emit(OpCodes.Ldloc_0);// 將 ldloc.0: i 放入計(jì)算堆棧

            iLGenerator.Emit(OpCodes.Ldc_I4_1);//  將 1 放入計(jì)算堆棧

            iLGenerator.Emit(OpCodes.Add); // 加法

            iLGenerator.Emit(OpCodes.Stloc_0);// 將計(jì)算后的值賦值給ldloc.0: i

 

            iLGenerator.MarkLabel(IL_0012);//添加標(biāo)簽 IL_0012

            iLGenerator.Emit(OpCodes.Ldloc_0);// 

            iLGenerator.Emit(OpCodes.Ldc_I4_S, 10);// 將 10 放入計(jì)算堆棧

            iLGenerator.Emit(OpCodes.Clt);// 計(jì)算 i<10;

            iLGenerator.Emit(OpCodes.Stloc_1); // 將i<10 的計(jì)算結(jié)果賦值給 ldloc.1

            iLGenerator.Emit(OpCodes.Ldloc_1); // 將ldloc.1 放入計(jì)算堆棧

 

            iLGenerator.Emit(OpCodes.Brtrue_S, IL_0005);// 如果 ldloc.1 則跳轉(zhuǎn)到IL_0005

 

            iLGenerator.Emit(OpCodes.Ret); // return

 

            return (Action)dynamicMethod.CreateDelegate(typeof(Action));

        }

        private static MethodInfo GetWriteLine()

        {

            Type type = typeof(Console);

            MethodInfo method = type.GetMethod("WriteLine", new Type[] { typeof(int) });

            return method;

        }

    }

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

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

上一篇:二次開發(fā)教程:orm 里使用Emit

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

主站蜘蛛池模板: 亚洲成年看片在线观看男男 | 91在线精品视频 | 亚洲七七久久精品中文国产 | 精子网久久国产精品 | 18hd xxxx国产在线 | 国产欧美日韩精品第二区 | 欧美经典成人在观看线视频 | 一区二区国产一区二区a4yy | 国产高清在线观看麻豆 | 欧美日韩午夜精品不卡综合 | 欧美曰韩一区二区三区 | 婷婷激情丁香 | 一区二区国产一区二区a4yy | 欧美换爱交换乱理伦片免费观看 | 国产精品久久久久久一区二区 | 好黄好猛好爽好痛的视频 | 91短视频在线观看手机 | 久久福利在线 | 日韩免费中文字幕 | 国产免费福利片 | 看全大色黄大色黄大片一级爽 | 欧美日本综合 | 92国产精品 | 美国一级大黄大黄大色毛片a | 自拍 欧美 | 手机看片自拍自自拍日韩免费 | 婷婷亚洲五月色综合 | 京野结衣免费一区二区 | a级精品九九九大片免费看 a级情欲片在线观看免费女中文 | 伊人久久综在合线亚洲91 | 三级精品视频在线播放 | 欧美.成人.综合在线 | 中文字幕亚洲欧美 | 欧美成人性色大片在线观看 | 夜夜夜精品视频免费 | 欧美亚洲精品一区二三 | 亚洲在线一区二区 | 日本玖玖视频 | 日韩欧美a级高清毛片 | 一级特色黄色片 | 热99re久久精品2久久久 |