using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Practices.Unity; using System.Reflection; using System.Reflection.Emit; namespace UnityDemo { class Program { static void Main(string[] args) { //实例化DynamicMethod DynamicMethod md = new DynamicMethod("hello", null, new Type[] { typeof(string) }, typeof(Program).Module); //生成MSIL生成器,该生成器可用于发出动态方法的方法体 ILGenerator il = md.GetILGenerator(); //定义要执行的方法 MethodInfo call = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }); //将指定的指令放到指令流上,将索引为 0 的参数加载到计算堆栈上。 il.Emit(OpCodes.Ldarg_0); //调用由传递的方法说明符指示的方法 il.Emit(OpCodes.Call, call); //从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方的计算堆栈上 il.Emit(OpCodes.Ret); //创建一个可用于执行该方法的委托 Action<string> writeLineDelegate = (Action<string>)md.CreateDelegate(typeof(Action<string>)); writeLineDelegate("hello world"); Console.ReadLine(); } } }
DynamicMethod 定义和表示动态方法
内容版权声明:除非注明,否则皆为本站原创文章。