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ā)教程: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)該是可以用來(lái)實(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

主站蜘蛛池模板: 免费国产好深啊好涨好硬视频 | 夜夜操影院 | 亚洲图片偷拍自拍 | 99热在线精品观看 | 日韩伦理亚洲欧美在线一区 | 日韩亚州 | 91丝袜美腿高跟国产极品老师 | 黄片毛片免费 | 久久这里只有精品首页 | 久久艹在线 | 色伊人色成人婷婷六月丁香 | 免费观看性欧美毛片 | 免费a级毛片 | 伊人亚洲综合网成人 | 欧美一区二区手机在线观看视频 | 操网| 日韩一区国产二区欧美三 | 亚洲美女福利视频在线 | 黄网站免费视频 | 久久香蕉国产线看观看99 | 亚洲一区二区三区首页 | 香蕉久久夜色精品国产2020 | 在线一区 | 六月丁香婷婷综合 | 在线观看免费视频片 | 国产va精品网站精品网站精品 | 国产精品不卡高清在线观看 | 91在线 | 亚洲| 亚洲成年网 | 2021国产成人午夜精品 | 香蕉视频色 | 国产成人亚洲欧美三区综合 | 欧美一级毛片高清毛片 | 在线精品国精品国产不卡 | 俄罗斯一级毛片免费播放 | 国产一级淫片a免费播放口欧美 | 欧美另类精品xxxx人妖换性 | 免费一级毛片在线播放欧美 | 精品一区二区在线欧美日韩 | 毛片无码国产 | 成人精品区 |