.net - usos - tipos de delegates
¿Cómo puedo crear un delegado de Acción desde MethodInfo? (2)
Deseo obtener un delegado de acción de un objeto MethodInfo. es posible?
Gracias.
Esto parece funcionar además del consejo de John:
public static class GenericDelegateFactory
{
public static object CreateDelegateByParameter(Type parameterType, object target, MethodInfo method) {
var createDelegate = typeof(GenericDelegateFactory).GetMethod("CreateDelegate")
.MakeGenericMethod(parameterType);
var del = createDelegate.Invoke(null, new object[] { target, method });
return del;
}
public static Action<TEvent> CreateDelegate<TEvent>(object target, MethodInfo method)
{
var del = (Action<TEvent>)Delegate.CreateDelegate(typeof(Action<TEvent>), target, method);
return del;
}
}
Use Delegate.CreateDelegate :
// Static method
Action action = (Action) Delegate.CreateDelegate(typeof(Action), method);
// Instance method (on "target")
Action action = (Action) Delegate.CreateDelegate(typeof(Action), target, method);
Para una Action<T>
etc., simplemente especifique el tipo de delegado apropiado en todas partes.
En .NET Core, Delegate.CreateDelegate
no existe, pero MethodInfo.CreateDelegate
hace:
// Static method
Action action = (Action) method.CreateDelegate(typeof(Action));
// Instance method (on "target")
Action action = (Action) method.CreateDelegate(typeof(Action), target);