关于这个主题有很多问题,但我有一个稍微改变了的版本。
我们有以下的代码:
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()中是否存在这些接口。但我想知道是否有更加优美的解决方案。
顺便说一句,这个问题源于我找到的一些代码,该代码在类上使用此检查(if(obj.GetType() == typeof(BaseClass)) { ... }
)。 现在,我们将类替换为接口。还要说明的是,我正在将此检查实现为布尔标志,因此这个问题纯粹是假设性的。