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