有没有一种方法可以通过.NET中的反射来调用显式实现的方法/属性
本文关键字:方法 调用 反射 属性 实现 一种 NET 可以通过 有没有 | 更新日期: 2023-09-27 18:01:11
我需要能够确定给定的方法或属性是否来自特定的接口并显式实现
有人这样做过吗?是否真的可以通过.NET反射来获得这些信息?
更新
正如在接受答案下面的评论中所看到的,我试图完成的实际任务是通过反射调用实现特定接口的方法。由于可能有多个接口具有相同的方法签名,我想根据接口确定要调用的正确实现。在我的场景中,实现类型、接口和方法名称是在运行时确定的,所以我不能使用简单的强制转换就我而言。
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;
}
如果在使用反射时,方法是私有的,并且其名称包含。,就像"System.IDisposable.Dispose"一样,它是一个显式实现。