С# GetMethod не возвращает родительский метод
У меня есть следующее дерево классов:
public class A
{
public static object GetMe(SomeOtherClass something)
{
return something.Foo();
}
}
public class B:A
{
public static new object GetMe(SomeOtherClass something)
{
return something.Bar();
}
}
public class C:B
{
}
public class SomeOtherClass
{
}
Учитывая SomeOtherClass parameter = new SomeOtherClass()
), это работает:
typeof(B).GetMethod("GetMe", new Type[] { typeof(SomeOtherClass) })).Invoke(null, parameter));
Но это:
typeof(C).GetMethod("GetMe", new Type[] { typeof(SomeOtherClass) })).Invoke(null, parameter));
выбрасывает NullReferenceException
, хотя я бы хотел, чтобы он вызывал тот же самый метод, что и выше.
Я пробовал несколько флагов привязки безрезультатно. Любая помощь?
Ответы
Ответ 1
Вы должны использовать одну из перегрузок с параметром BindingFlags
и включить FlattenHierarchy
.
Указывает, что должны быть возвращены общедоступные и защищенные статические члены в иерархии. Частные статические члены в унаследованных классах не возвращаются. Статические члены включают поля, методы, события и свойства. Вложенные типы не возвращаются.
(Отредактировано, чтобы удалить точку о частных статических методах, теперь вопрос был изменен, чтобы сделать их общедоступными.)
Ответ 2
Вам нужно передать флаг BindingFlags.FlattenHierarchy
в GetMethod
, чтобы выполнить поиск по иерархии:
typeof(C).GetMethod("GetMe", BindingFlags.FlattenHierarchy, null, new Type[] { typeof(SomeOtherClass) }, null)).Invoke(null, parameter));