如何检查一个类是否继承了另一个类而不实例化它?

假设我有一个这样的类:

class Derived : // some inheritance stuff here
{
}

我想在我的代码中检查这样的内容:

Derived is SomeType;

但是看起来 is操作符需要 Derived 是 Dervy 类型的变量,而不是 Derived 本身。 我不想创建一个类型为 Derived 的对象。
我怎样才能确保派生继承 SomeType而不实例化它?

P.S. 如果有帮助的话,我想要类似于 where关键字对泛型所做的事情。
编辑:
类似于 这个的答案,但它检查的是一个对象。我想检查类本身。

137873 次浏览

试试这个

typeof(IFoo).IsAssignableFrom(typeof(BarClass));

这将告诉您 BarClass(Derived)是否实现了 IFoo(SomeType)

要检查可分配性,可以使用 Type.IsAssignableFrom方法:

typeof(SomeType).IsAssignableFrom(typeof(Derived))

对于类型相等、继承关系和接口实现,这将按照您的预期工作,但是当您在显式/隐式转换运算符之间寻找“可分配性”时,没有将按照您的预期工作。

要检查严格的继承,可以使用 Type.IsSubclassOf:

typeof(Derived).IsSubclassOf(typeof(SomeType))