У моего базового класса есть открытый статический метод, но когда я вызываю typeof(TDerived).GetMethods(BindingFlags.Public |BindingFlags.Static
), мой метод не возвращается. (TDerived, конечно, наследуется каким-то образом от моего базового класса). У меня нет ссылки на мой базовый класс в месте этого запроса.
Что я делаю неправильно?
Как получить открытый статический метод базового класса?
Ответ 1
Используйте флаг BindingFlags.FlattenHierarchy
:
typeof(TDerived).GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)
Это документированное поведение в разделе Заметки для метода Type.GetMethods(BindingFlags)
.
Ответ 2
Если вы хотите получить все статические члены вашего прямого базового типа, т.е. только статические методы класса, из которых наследуется текущий класс, тогда вы также можете получить к нему доступ через отражение.
Ваш код, с вашего вопроса, станет следующим:
typeof(TDerived).BaseType.GetMethods(BindingFlags.Public | BindingFlags.Static)
^---+---^
|
+-- add this
Конечно, это будет получать только статические методы этого типа. Если вы хотите использовать все статические методы вашего собственного типа и базового типа, перейдите к опции FlattenHierarchy, которая @Ondrej ответил с, гораздо лучше.