Невозможно выполнить GetMethod () для унаследованного метода - PullRequest
0 голосов
/ 07 июня 2019

У меня есть базовый класс, у которого есть метод с именем "GetAllKeys", который я пытаюсь вызвать с помощью отражения.Проблема в том, что когда я использую GetMethod(), результат равен нулю.

var method = classType.GetMethod("GetAllKeys", BindingFlags.Public | BindingFlags.Static );

Это сигнатура метода из класса.

public static IEnumerable<string> GetAllKeys()

Через отладчик я вижуметод существует и имеет следующие свойства.

InvocationFlags = INVOCATION_FLAGS_INITIALIZED | INVOCATION_FLAGS_NEED_SECURITY
BindingFlags    Static | Public 
IsDynamicallyInvokable  true    
System.Runtime.InteropServices._MethodBase.IsHideBySig  true    
System.Runtime.InteropServices._MethodBase.IsPublic true    
System.Runtime.InteropServices._MethodBase.IsStatic true    

Похоже, HideBySig является атрибутом метода, поэтому я не могу использовать его в GetMethod(), и раньше мне не приходилось делать это с другими методами втот же унаследованный класс.

Что я должен сделать, чтобы успешно извлечь этот метод для вызова?

1 Ответ

2 голосов
/ 07 июня 2019

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

var method = classType.GetMethod("GetAllKeys", BindingFlags.Public | BindingFlags.Static  | FlattenHierarchy);

Согласно документации , BindingFlags.FlattenHierarchy делает это:

Указывает, что открытые и защищенные статические члены в иерархии должны быть возвращены.Частные статические члены в унаследованных классах не возвращаются.Статические члены включают поля, методы, события и свойства.Вложенные типы не возвращаются.

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