Emit学习笔记
1,给字段设置值,并返回
static void Main(string[] args){//给字段设置值,并返回AssemblyName assemblyName = new AssemblyName("test");var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);var module = assemblyBuilder.DefineDynamicModule("test_module");var typeBuilder = module.DefineType("produce_123", TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Sealed);var method = typeBuilder.DefineMethod("aa", MethodAttributes.Public, CallingConventions.Standard, typeof(string), new Type[] { typeof(string) });var fb = typeBuilder.DefineField("bb", typeof(string), FieldAttributes.Public);var li= method.GetILGenerator();li.Emit(OpCodes.Ldarg_0);//获取thisli.Emit(OpCodes.Ldarg_1);//获取aa方法的第一个参数li.Emit(OpCodes.Stfld, fb);//设置bb字段的值li.Emit(OpCodes.Ldarg_0);//获取thisli.Emit(OpCodes.Ldfld, fb);//将bb字段压入栈li.Emit(OpCodes.Ret);//返回值var type = typeBuilder.CreateType();var obj=Activator.CreateInstance(type);var aa= type.GetMethod("aa").Invoke(obj, new object[] { "aa" });Console.WriteLine(aa);Console.ReadKey();}
转载于:https://www.cnblogs.com/zd1994/p/9871769.html
总结
- 上一篇: 【软件工程实践】结对项目-四则运算 “软
- 下一篇: 小程序项目实践总结