Emit学习笔记
1,給字段設(shè)置值,并返回
static void Main(string[] args){//給字段設(shè)置值,并返回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方法的第一個(gè)參數(shù)li.Emit(OpCodes.Stfld, fb);//設(shè)置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();}?
轉(zhuǎn)載于:https://www.cnblogs.com/zd1994/p/9871769.html
總結(jié)
- 上一篇: 【软件工程实践】结对项目-四则运算 “软
- 下一篇: 小程序项目实践总结