如何知道一个类是否重新定义了一个接口

时间:2014-07-21 16:09:25

标签: c# system.reflection

我有以下课程:

internal class Father : ICloneable
{
    public object Clone() { ... }
    public void Dispose() { ... }
}

internal class Son : Father { }
internal class Daughter : Father, ICloneable { }

我尝试使用带反射的Type中的GetInterfaces方法检索接口,但Son和Daughter之间没有区别。有没有办法找到仅在当前类级别声明的接口。

对于儿子来说,结果应该是没有的,对于女儿来说,它应该是ICloneable。

PS:我知道重新定义子类中的接口是没用的,但这不是来自我的程序集......

1 个答案:

答案 0 :(得分:3)

您需要使用unmanaged .NET Metadata API而不是托管的Reflection API。 This blog post explains the differences。具体来说,EnumInterfaceImpls方法可以为您提供所需的内容。我没有亲自使用托管代码中的非托管API,但快速浏览一下SO会给你很多人这样做的例子。我希望这回答了你的问题。我不知道你想要实现的目标。如果您需要实现一些代码实践策略检查器,我认为您最好通过其代码模型API在IDE(VS)中实现它 - 您的代码可以推理C#源代码,而不是MSIL输出。如果您打算将界面用作不可继承的标记界面",那么您最好使用属性。