关于这个话题有很多问题,但我有一个稍微改变了它的版本。确定一个类是否实现了一个非常特定的接口
我们有以下代码:
interface IFoo { }
interface IBar : IFoo { }
class Foo : IFoo { }
class Bar : IBar { }
bool Implements_IFoo(Type type) { /* ??? */ }
现在,故事的扭曲:方法Implements_IFoo
应该只在类型,而不是实现的IFoo任何从IFoo的派生的接口返回true。为了说明这里是这种方法的一些例子:
Implements_IFoo(typeof(Foo)); // Should return true
Implements_IFoo(typeof(Bar)); // Should return false as Bar type
// implements an interface derived from IFoo
注意,有可能从IFoo的衍生大量的接口和你不一定知道它们的存在。
显而易见的方法是通过反射找到从IFoo派生的所有接口,然后检查typeof(Bar).GetInterfaces()是其中的任何接口。但我想知道是否有人可以想出更优雅的解决方案。
PS这个问题来自我发现的一些代码,它使用这个检查类(if(obj.GetType() == typeof(BaseClass)) { ... }
)。我们正在使用现在特定代码的接口替换类。此外,为了以防万一 - 我将此检查作为布尔标志实施,所以此问题纯粹是假设性的。
我真的很好奇,为什么你需要这种内省的第一位。机会是你的设计是错误的。 – tdammers 2012-04-27 13:38:15
请在下次发表评论前仔细阅读问题 - 我已经解释过这是一个假设问题;) – Jefim 2012-04-27 16:39:22