2010-09-22 10 views
12

ho questo due classi:difficoltà invocando metodo statico utilizzando la riflessione e C#

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

} 

Ora voglio richiamare NewItem() metodo su Video Class utilizzando la riflessione. quando provo con questo:

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

dell'oggetto inf dopo l'esecuzione di questa linea è ancora nullo. posso invocare il metodo statico NewItem() sulla classe Video?

risposta

18

È necessario specifiy BindingFlags.Public e BindingFlags.FlattenHierarchy oltre a BindingFlags.Static:

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

In alternativa, è possibile ottenere il metodo dal tipo dichiarando senza BindingFlags.FlattenHierarchy:

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

ho provato entrambi i modi ed entrambi funzionano.

+1

grazie uomo. funziona. accetterò la tua risposta molte grazie.. – backdoor

Problemi correlati