反射发出一

反射用来获取程序集及其相关信息。

反射发出是在运行时动态构造元数据和MSIL语言还可生产PE文件。

使用反射发出的步骤基本是固定的 ,用HELLO  WORD 做开始

        public void BuildeMthod()
        {
            //1.构建程序集
            AppDomain myDomain = AppDomain.CurrentDomain;
            AssemblyName asmName = new AssemblyName();
            asmName.Name = "MyDom";
            AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
                                           asmName,
                                           AssemblyBuilderAccess.RunAndSave);

            //模块和类型
            ModuleBuilder myModule = myAsmBuilder.DefineDynamicModule("MyDom",
                                                                "MyDom.dll");
            //类型
            TypeBuilder myTypeBld = myModule.DefineType("MyDomType",
                                                        TypeAttributes.Public);

            //方法 
            MethodBuilder myMthdBld = myTypeBld.DefineMethod(
                                           "SampleC",
                                           MethodAttributes.Public |
                                           MethodAttributes.Static
                                           );

            //生成MSIL语言
            ILGenerator ILout = myMthdBld.GetILGenerator();
            ILout.Emit(OpCodes.Nop);
            ILout.Emit(OpCodes.Ldstr, "Hello World!");
            MethodInfo mi = typeof(System.Console).GetMethod("Write", new Type[] { typeof(string) });
            ILout.Emit(OpCodes.Call,mi);
            ILout.Emit(OpCodes.Nop);
            ILout.Emit(OpCodes.Ret);

            Type myType = myTypeBld.CreateType();

            myAsmBuilder.Save("MyDom.dll");

            MethodInfo myMthdInfo = myType.GetMethod("SampleC");
            myMthdInfo.Invoke(myType,null);

        }

 

转载于:https://www.cnblogs.com/nessie/p/3980816.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值