2010-09-22 12 views
12

Ich habe diese zwei Klassen:Probleme Aufruf statische Methode mithilfe von Reflektion und C#

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

} 

jetzt i NewItem() Methode auf Klasse Video mit Reflexion aufrufen wollen. wenn ich versuche, mit diesem:

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

das Objekt inf nach dieser Zeile noch null ausgeführt wird. kann ich statische NewItem() Methode auf Klasse Video aufrufen?

Antwort

18

Sie benötigen BindingFlags.Public und BindingFlags.FlattenHierarchy zusätzlich zu BindingFlags.Static specifiy:

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

Alternativ können Sie das Verfahren vom Typ deklarieren, ohne BindingFlags.FlattenHierarchy erhalten:

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

Ich habe versucht, in beiden Richtungen und sie arbeiten beide.

+1

danke mann. es funktioniert. Ich werde deine Antwort akzeptieren. Danke vielmals.. – backdoor

Verwandte Themen