method
будет System.Reflection.RuntimeMethodInfo
, который является производным от System.Reflect.MethodBase
.Например, вы можете вызвать Invoke()
(хотя, если вы сделали это в тот момент, когда получили его, то это приведет к бесконечной рекурсии, которая в конечном итоге умрет, переполнив стек).
Вызов ToString()
возвращает полностью определенное имя.Вы называли проект InterfaceReflection?
Не уверен, что еще вы хотите.
Редактировать: Хорошо, теперь я делаю.Чтобы найти декларирующий тип, посмотрите на свойство DeclaringType, он вернет класс, в котором был объявлен метод (который может быть классом, в котором он был вызван, или базовый класс):это возвращает объект Type для Foo.
Теперь для хитрого бита, потому что вы заботитесь об интерфейсе, на котором он был объявлен.Однако может быть несколько интерфейсов, которые определяют метод с точно такой же сигнатурой, что означает простой вопрос: «Если это произошло из интерфейса, что это был за интерфейс?»не всегда есть один ответ.
Возможно, есть более удобный способ сделать это, но все, что я могу придумать, это вызвать GetInterfaces()
для Type
объекта, который вы получили от DeclaringType
, изатем ищем того, чье имя совпадает с подписью метода.