关于这个话题有很多问题,但我有一个稍微改动过的版本。
我们有以下代码:
interface IFoo { }
interface IBar : IFoo { }
class Foo : IFoo { }
class Bar : IBar { }
bool Implements_IFoo(Type type) { /* ??? */ }
现在,故事的转折点是:Implements_IFoo
只有当 Type 只实现 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)) { ... }
)使用了这个检查。现在,我们正在用特定代码替换类与接口。另外,以防万一 - 我将此检查作为布尔标志实现,所以这个问题纯粹是假设性的。