2010-09-22 2 views
12

у меня есть эти два класса:Проблемы вызов статического метода с использованием отражения и C#

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

} 

теперь я хочу, чтобы вызвать NewItem() метода на класс видео с помощью отражения. , когда я пытаюсь с этим:

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

объект инф после выполнения этой строки остается пустой. Могу ли я вызвать статические NewItem() метод на классе Видео?

ответ

18

Вы должны specifiy BindingFlags.Public и BindingFlags.FlattenHierarchy в дополнение к BindingFlags.Static:

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

В качестве альтернативы, вы можете получить метод из объявляющего типа без BindingFlags.FlattenHierarchy:

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

Я пробовал оба пути и они оба работают.

+1

спасибо, человек. он работает. Я собираюсь принять ваш ответ. большое спасибо.. – backdoor

Смежные вопросы