Как получить публичный статический метод базового класса? - PullRequest
15 голосов
/ 15 апреля 2011

В моем базовом классе есть открытый статический метод, но когда я вызываю typeof(TDerived).GetMethods(BindingFlags.Public |BindingFlags.Static), мой метод не возвращается. (Конечно, TDerived наследует от моего базового класса). У меня нет ссылки на мой базовый класс в месте этого запроса.
Что я делаю не так?

Ответы [ 2 ]

31 голосов
/ 15 апреля 2011

Используйте флаг BindingFlags.FlattenHierarchy:

typeof(TDerived).GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)

Это задокументированное поведение в разделе «Примечания» для метода Type.GetMethods(BindingFlags).

2 голосов
/ 15 апреля 2011

Если вы хотите заполучить все статические члены вашего прямого базового типа, т.е.только статические методы класса, от которого унаследован текущий класс, вы также можете получить к нему доступ посредством отражения.

Ваш код из вашего вопроса станет:

typeof(TDerived).BaseType.GetMethods(BindingFlags.Public | BindingFlags.Static)
                ^---+---^
                    |
                    +-- add this

Конечно, только получит статические методы этого типа.Если вы хотите, чтобы все статические методы вашего собственного типа и базового типа (типов), то включите опцию FlattenHierarchy, чтобы @ Ondrej ответил с , оченьлучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...