Добрый день
Имеется 2 метода
| Код | public void PrintMessage(object obj) { MethodInfo methodInfo = obj.GetType().GetProperty("Message").GetGetMethod(); Paragraph paragraph = new Paragraph(); paragraph.Inlines.Add(methodInfo.Invoke(obj, null).ToString()); //MessageBox.Show(methodInfo.Invoke(obj, null).ToString()); box.Document.Blocks.Add(paragraph); } private static void RegisterEvent(object targetObject, string eventName, string methodName) { EventInfo eventInfo = targetObject.GetType().GetEvent(eventName); MethodInfo methodInfo = eventInfo.EventHandlerType.GetMethod("Invoke"); IEnumerable<Type> types = methodInfo.GetParameters().Select(param => param.ParameterType);
DynamicMethod dynamicMethod = new DynamicMethod(eventInfo.EventHandlerType.Name, null, types.ToArray(), typeof (QueryWindow)); methodInfo = typeof (QueryWindow).GetMethod(methodName, new[] {typeof (object)});
ILGenerator ilGenerator = dynamicMethod.GetILGenerator(256); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.EmitCall(OpCodes.Call, methodInfo, null); ilGenerator.Emit(OpCodes.Ret);
dynamicMethod.DefineParameter(1, ParameterAttributes.In, "sender"); dynamicMethod.DefineParameter(2, ParameterAttributes.In, "e");
Delegate methodDelegate = dynamicMethod.CreateDelegate(eventInfo.EventHandlerType); eventInfo.AddEventHandler(targetObject, methodDelegate); }
|
Если первый метод сделать статическим то данный код работает. Не подскажете ли как изменить второй метод чтобы через Emit вызывать метод текущего объекта? |