static DynamicMethodTestClass() { Type[] writeLineArgs = { typeof(string) }; //dynamic method to call static writeline dmCallStaticWriteLine = new DynamicMethod("WriteLineStatic", null, writeLineArgs, typeof(DynamicMethodTestClass).Module); MethodInfo consoleWriteLine = typeof(Console).GetMethod("WriteLine", writeLineArgs); ILGenerator ilCallStatic = dmCallStaticWriteLine.GetILGenerator(); ilCallStatic.Emit(OpCodes.Ldarg_0); ilCallStatic.EmitCall(OpCodes.Call, consoleWriteLine, null); ilCallStatic.Emit(OpCodes.Ret); staticWriteLineDelegate = (WriteLineInvoker)dmCallStaticWriteLine.CreateDelegate(typeof(WriteLineInvoker)); //dynamic method to call instance writeline Type[] instanceWriteLineArgs = { typeof(object), typeof(string) }; dmCallInstanceWriteLine = new DynamicMethod("WriteLineInstance", null, instanceWriteLineArgs, typeof(DynamicMethodTestClass).Module); MethodInfo instanceWriteLine = typeof(WriteLineClass).GetMethod("WriteLine", writeLineArgs); ILGenerator ilCallInstance = dmCallInstanceWriteLine.GetILGenerator(); ilCallInstance.Emit(OpCodes.Ldarg_0); ilCallInstance.Emit(OpCodes.Ldarg_1); ilCallInstance.EmitCall(OpCodes.Call, instanceWriteLine, null); ilCallInstance.Emit(OpCodes.Ret); instanceWriteLineDelegate = (InstanceWriteLineInvoker)dmCallInstanceWriteLine.CreateDelegate(typeof(InstanceWriteLineInvoker)); }