2010-09-22 17 views
12

tengo esta dos clases:problemas para invocar el método estático mediante la reflexión y C#

Item<T> : BusinessBase<T> where T : Item<T> 
{ 
    public static T NewItem() 
    { 
     //some code here 
    } 
} 
Video : Item <Video> 
{ 

} 

ahora quiero invocar newItem() método de video de clase mediante la reflexión. cuando intento con esto:

MethodInfo inf = typeof(Video).GetMethod("NewItem", BindingFlags.Static); 

el objeto inf después de ejecutar esta línea todavía es nulo. ¿Puedo invocar el método estático NewItem() en la clase Video?

Respuesta

18

Necesitas specifiy BindingFlags.Public y BindingFlags.FlattenHierarchy además de BindingFlags.Static:

MethodInfo inf = typeof(Video).GetMethod("NewItem", 
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy); 

Alternativamente, se puede obtener el método del tipo de la que se declara sin BindingFlags.FlattenHierarchy:

MethodInfo inf = typeof(Item<Video>).GetMethod("NewItem", 
    BindingFlags.Static | BindingFlags.Public); 

que he probado en ambos sentidos y ambos trabajan.

+1

gracias hombre. funciona. Voy a aceptar tu respuesta. muchas gracias.. – backdoor

Cuestiones relacionadas