2011-08-28 13 views
9

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")

+0

Tienes ¿has intentado 'BindingFlags.Instance'? – Steven

+0

por favor vea mi código modificado - GetType ("this") le está dando la excepción porque está equivocado ... – Yahia

Respuesta

11

tratar

this.GetType().InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod, 
    null, 
    this, 
    new object[] { sender, e } 
); 

De MSDN

Si InvokeMethod se especifica por sí mismo, BindingFlags.Public, BindingFlags.Instance y BindingFlags.Static son automáticamente incluido

+0

Obtengo una excepción NullReferenceException ... –

+0

Cometí un error, vea el código modificado ... – Yahia

+0

Eso es 'BindingFlags.Default'. Una vez que especifique cualquier 'BindingFlags', perderá el valor predeterminado. – SLaks

0

Puedes añadir BingingFlags.Instance.

+0

¿Quiere decir 'BindingFlags.Instance'? –

+0

eso es lo que quería decir, pero no es necesario ... – Yahia

Cuestiones relacionadas