He intentado invocar un método por nombre, pero el problema es que el método que invoco no puede ser estático y debe ser de la clase actual.invocar método no estático por nombre
he probado el modo de hacerlo de esta manera:
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("MyNamespace.MyClass");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
null,
null,
new object[] { sender, e }
);
}
Obviamente, esto sólo funciona para los miembros estáticos, así que intenté algo como esto
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("this");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
null,
new object[] { sender, e }
);
}
Pero consigo Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty). Parameter name: bindingFlags
de error ..
Entonces, ¿cómo puedo hacer esto?
EDIT:
Así:
public void InvokeMenuMethod(string methodName, object sender, EventArgs e) {
Type.GetType("this").InvokeMember(
methodName,
BindingFlags.InvokeMethod,
null,
this,
new object[] { sender, e }
);
}
da una solución NullReferenceException
: No "este" en Type.GetType("this")
Tienes ¿has intentado 'BindingFlags.Instance'? – Steven
por favor vea mi código modificado - GetType ("this") le está dando la excepción porque está equivocado ... – Yahia