Можно ли отразить явную реализацию интерфейса из стека вызовов? Я хочу использовать эту информацию для поиска атрибута в самом интерфейсе.
Учитывая этот код:
interface IFoo
{
void Test();
}
class Foo : IFoo
{
void IFoo.Test() { Program.Trace(); }
}
class Program
{
static void Main(string[] args)
{
IFoo f = new Foo();
f.Test();
}
public static void Trace()
{
var method = new StackTrace(1, false).GetFrame(0).GetMethod();
// method.???
}
}
В частности, в Trace () я хотел бы получить доступ к typeof (IFoo)
из метода
.
В окне просмотра, если я смотрю на method.ToString ()
, он дает мне Void InterfaceReflection.IFoo.Test ()
(InterfaceReflection - это имя моей сборки.)
Как я могу получить оттуда typeof (IFoo)
? Должен ли я использовать поиск типа на основе имени из самой сборки, или есть Type IFoo
, спрятанный где-то в MethodBase
?
ОБНОВЛЕНИЕ:
Вот окончательное решение , благодаря Kyte
public static void Trace()
{
var method = new StackTrace(1, false).GetFrame(0).GetMethod();
var parts = method.Name.Split('.');
var iname = parts[parts.Length - 2];
var itype = method.DeclaringType.GetInterface(iname);
}
itype
будет иметь тип интерфейса для метода реализации. Это будет работать только с явными реализациями интерфейса, но это именно то, что мне нужно. Теперь я могу использовать itype
для запроса атрибутов, прикрепленных к фактическому типу интерфейса.
Спасибо всем за помощь.