我需要能够确定给定的方法或属性来自特定界面并明确实施。
有没有人这样做过,实际上是否有可能通过.NET反射获取这些信息?
更新
从下面的评论中可以看出已接受的答案,我想要实现的实际操作是通过反射调用实现特定接口的方法。由于可能有多个具有相同方法签名的接口,我想确定基于接口调用的正确实现。在我的场景中,实现类型,接口和方法名称是在运行时确定的,所以我不能使用简单的转换 就我而言。
答案 0 :(得分:16)
C#中明确实现的接口方法在目标类中是私有的。您可以使用此事实并创建此扩展方法以仅返回这些方法:
static IEnumerable<MethodInfo> GetExplicitlyImplementedMethods(this Type targetType,
Type interfaceType)
{
return targetType.GetInterfaceMap(interfaceType).TargetMethods.Where(m => m.IsPrivate);
}
注意:这仅适用于C# 。
UPDATE:但是,根据您的要求,您似乎只想知道哪些方法实现了哪些接口方法,而没有真正关心实现是隐式还是显式。对于跨语言的解决方案,这就足够了:
static IEnumerable<MethodInfo> GetImplementedMethods(this Type targetType,
Type interfaceType)
{
return targetType.GetInterfaceMap(interfaceType).TargetMethods;
}
答案 1 :(得分:1)
如果使用反射时方法是私有的,并且其名称包含。,如“System.IDisposable.Dispose”,那么它是一个显式实现。