【发布时间】:2019-05-08 20:10:26
【问题描述】:
我希望能够使用反射来判断SomClassImpl 中方法GetName 的实现来自接口IHasName。举个例子:
public interface IHasName
{
string GetName();
}
public interface IOtherInterface
{
//...elided...
}
public class MyClass : IHasName, IOtherInterface
{
/*
* I want to use reflection to know this
* implements IHasName.GetName()
*/
public string GetName()
{
return "me";
}
}
这可能吗?
当我尝试typeof(MyClass).GetMethod("GetName").GetBaseDefinition().DeclaringType 和typeof(MyClass).GetMethod("GetName").DeclaringType 时,它们都返回实现类,不是接口。
【问题讨论】:
-
除非
MyClass是抽象的,难道不是必须实现GetName吗?什么时候会出现没有实现但仍然实现接口的情况?我知道新的 C# 版本有接口实现,但我认为这是将实现插入派生类的语法糖...... -
@RonBeyer 我想我不清楚,抱歉。我不需要知道它实现了接口“X”。我想知道,“这个方法来自接口 X,这个方法来自接口 Y,这个方法只来自即将到来的类”
-
-
var iFC = myClass.GetType().GetInterfaces().FirstOrDefault(ifc => ifc.GetMethods().Any(m => m.Name.Equals("[MethodName]")));。或使用myClass.GetType().GetMethods()找到的值。 -
@DonRhummy 您可能想在edit 发帖解释 GetInterfaceMap 如何/为什么不起作用...
标签: c# .net reflection