С# 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));