完善主體資料,免費(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ā)教程:C# 動(dòng)態(tài)生成程序集

    發(fā)布于:2019-07-24 16:44:30

    網(wǎng)友投稿

    更多

    假設(shè)有一個(gè)ITest接口,它有兩個(gè)實(shí)現(xiàn)分別是TestClass1,和TestClass2,這時(shí)候如果需要一個(gè)TestClass4類但是現(xiàn)有程序里又沒有這個(gè)類,就可以在運(yùn)行時(shí)生成一個(gè)這樣的類


    這個(gè)應(yīng)該是可以用來實(shí)現(xiàn)AOP,


        public interface ITest

        {

            void Run();

        }


        public class TestClass1 : ITest

        {

            public void Run()

            {

                Console.WriteLine("TestClass1");

            }

        }

        public class TestClass2 : ITest

        {

            public void Run()

            {

                Console.WriteLine("TestClass2");

            }

        }


        public class TestClass4 : ITest

        {

            public void Run()

            {

                ITest t1 = new TestClass1();

                t1.Run();

                ITest t2 = new TestClass2();

                t2.Run();

            }

        }




        class Program

        {

            static void Main(string[] args)

            {

                const string ASSEMBLY_NAME = "MyDynamicAssembly";


                AppDomain appDomain = AppDomain.CurrentDomain;


                AssemblyName assemblyName = new AssemblyName(ASSEMBLY_NAME);


                AssemblyBuilder assemblyBuilder = appDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndCollect);


                ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll");


                TypeBuilder typeBuilder = moduleBuilder.DefineType("TestClass3", TypeAttributes.Public | TypeAttributes.Class);


                typeBuilder.AddInterfaceImplementation(typeof(ITest));


                MethodBuilder methodBuilder = typeBuilder.DefineMethod("Run", MethodAttributes.Public | MethodAttributes.Virtual);


                ILGenerator iLGenerator = methodBuilder.GetILGenerator();


                iLGenerator.DeclareLocal(typeof(ITest));


                iLGenerator.Emit(OpCodes.Nop);

                iLGenerator.Emit(OpCodes.Newobj, typeof(TestClass1).GetConstructors().First());

                iLGenerator.Emit(OpCodes.Stloc_0);

                iLGenerator.Emit(OpCodes.Ldloc_0);

                iLGenerator.Emit(OpCodes.Callvirt, typeof(ITest).GetMethod("Run"));

                iLGenerator.Emit(OpCodes.Nop);


                iLGenerator.Emit(OpCodes.Nop);

                iLGenerator.Emit(OpCodes.Newobj, typeof(TestClass2).GetConstructors().First());

                iLGenerator.Emit(OpCodes.Stloc_0);

                iLGenerator.Emit(OpCodes.Ldloc_0);

                iLGenerator.Emit(OpCodes.Callvirt, typeof(ITest).GetMethod("Run"));

                iLGenerator.Emit(OpCodes.Nop);


                iLGenerator.Emit(OpCodes.Ret);


                Type type = typeBuilder.CreateType();


                ITest t = (ITest)Activator.CreateInstance(type);


                t.Run();


                Console.ReadLine();

            }

        }

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

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

    上一篇:二次開發(fā)教程:Revit開發(fā)BuildingEnvelopeAnalyzer

    下一篇:二次開發(fā)教程:C# 初探UI Automation

    60acb4e0ef112.png
    主站蜘蛛池模板: 免费一区二区无码视频在线播放 | 精品一区二区三区无码免费视频 | 中文字幕av无码一区二区三区电影| 日韩精品久久一区二区三区| 久久青草精品一区二区三区| 色婷婷亚洲一区二区三区| 性色AV一区二区三区天美传媒| 亚洲色精品aⅴ一区区三区| 欧洲精品码一区二区三区免费看 | 无码一区二区三区亚洲人妻| 日韩电影一区二区| 中文字幕日韩人妻不卡一区| 精品日韩一区二区三区视频| 色一情一乱一伦一区二区三欧美| 另类一区二区三区| 怡红院一区二区三区| 国产成人无码AV一区二区 | 久久se精品一区精品二区国产| 亚洲日韩国产一区二区三区在线| 亚洲AV综合色一区二区三区| 人妻少妇精品一区二区三区| 99久久精品国产免看国产一区 | 无码精品人妻一区二区三区免费| 国产精品无码一区二区在线 | 亚洲一区二区电影| 一区二区三区国产| 成人影片一区免费观看| 日本大香伊一区二区三区| 熟女少妇丰满一区二区| 无码成人一区二区| 亚洲综合在线成人一区| 无码人妻一区二区三区免费| 成人精品视频一区二区三区尤物| 无码午夜人妻一区二区不卡视频| 国产精品亚洲一区二区三区 | 国产成人一区二区三区视频免费| 无码国产精品一区二区免费vr | 国产三级一区二区三区| 一区二区三区四区在线播放| 精品一区二区久久久久久久网站| 色窝窝无码一区二区三区成人网站|