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

完善主體資料,免費贈送VIP會員!
* 主體類型
* 企業名稱
* 信用代碼
* 所在行業
* 企業規模
* 所在職位
* 姓名
* 所在行業
* 學歷
* 工作性質
請先選擇行業
您還可以選擇以下福利:
行業福利,領完即止!

下載app免費領取會員

NULL

ad.jpg

二次開發教程:Emit 循環

發布于:2019-07-24 16:35:03

網友投稿

更多

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


實現


    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 比較的結果

 

            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 設置為0

 

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

 

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

            iLGenerator.Emit(OpCodes.Nop);

 

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

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

            iLGenerator.Emit(OpCodes.Nop);

 

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

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

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

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

 

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

            iLGenerator.Emit(OpCodes.Ldloc_0);// 

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

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

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

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

 

            iLGenerator.Emit(OpCodes.Brtrue_S, IL_0005);// 如果 ldloc.1 則跳轉到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;

        }

    }

本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

未標題-1.jpg

上一篇:二次開發教程:orm 里使用Emit

下一篇:二次開發教程:Emit DynamicMethod

主站蜘蛛池模板: 欧美亚洲国产精品久久久久 | 欧美区一区二区三 | 欧美人体一区二区三区 | 久久久久久99精品 | 中文字幕成人在线 | 亚洲欧美国产视频 | 中国一级做a爱片免费 | 婷婷色爱区综合五月激情韩国 | 亚洲人欧洲日韩 | 97超视频在线观看 | 欧美国产合集在线视频 | 亚洲精国产一区二区三区 | 久久国产精品免费专区 | 国产在线精品一区二区三区不卡 | 香蕉视频色 | 免费观看黄色一级视频 | 国产三区二区 | a一级一色一情 | 亚洲 欧美 日韩中文字幕一区二区 | 一区二区三区日韩精品 | 午夜久久久久久亚洲国产精品 | 一区二区视频在线免费观看 | 久久在线视频免费观看 | 在线观看 日韩 | 91久久青青草原线免费 | 亚洲精品一区二区三区婷婷月 | 久久成年人视频 | 亚洲精品日韩一区二区 | 日批日韩在线观看 | 在线精品自拍亚洲第一区 | 国产精品网红女主播久久久 | 深夜做爰性大片很黄很色视频 | 亚洲国产精品综合久久 | 免费观看黄a一级视频 | 免费看黄色的网站 | 免费看片免 | 激情综合网址 | 青青草99热久久 | 国产精品短视频免费观看 | 亚洲黄色网址在线观看 | 免费一级毛片正在播放 |