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

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

下載app免費領取會員

NULL

ad.jpg

二次開發教程:C# 動態生成程序集

發布于:2019-07-24 16:44:30

網友投稿

更多

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


這個應該是可以用來實現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();

        }

    }

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

未標題-1.jpg

上一篇:二次開發教程:Revit開發BuildingEnvelopeAnalyzer

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

主站蜘蛛池模板: 日韩日韩日韩日韩 | 丁香五六月婷婷 | 国产亚洲人成在线影院 | 女人洗澡一级毛片一级毛片 | 黄色网址在线免费观看 | 生活一级毛片 | 欧美色图亚洲综合 | 毛片一级在线观看 | 视频一区二区三区蜜桃麻豆 | 欧美日韩国产亚洲人成 | 国产日韩中文字幕 | 一级毛片高清 | 午夜大片免费完整在线看 | 国产亚洲精品自在线观看 | 欧美专区在线观看 | 国产精品4p露脸在线播放 | 香蕉乱码成人久久天堂爱免费 | 欧美性xxxxx极品老少 | 毛片毛片毛片毛片毛片 | 婷婷色九月 | 日本一级特黄毛片免费视频9 | 麻豆精品国产剧情在线观看 | 国产成人19禁在线观看 | 日本亚洲精品久久 | 日韩第十页 | 搞黄视频在线观看 | 日本亚洲欧美国产日韩ay高清 | 欧美精品亚洲精品日韩1818 | 色婷婷av777 色婷婷一区二区三区四区成人 | 6080yy午夜不卡一二三区 | 在线成人福利视频 | 精品一区亚洲 | 黄频大全 | 免费黄片毛片 | 亚洲香蕉毛片久久网站老妇人 | 亚洲精品福利视频 | 未满十八18周岁禁止免费国产 | 免费网站看av片 | 久久久噜噜噜久久中文字幕色伊伊 | 天天躁日日躁狠狠躁中文字幕老牛 | 又爽又黄又无遮挡的视频美女软件 |