欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Emit学习笔记

发布时间:2024/9/5 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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

总结

以上是生活随笔为你收集整理的Emit学习笔记的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。