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

本文关键字:另一个 实例化 继承 一个 何检查 检查 是否 | 更新日期: 2023-09-27 18:19:25

假设我有一个这样的类:

class Derived : // some inheritance stuff here
{
}

我想在我的代码中检查如下内容:

Derived is SomeType;

但是看起来is运算符需要Derived类型的变量,而不是Derived本身。我不想创建一个派生类型的对象。
我如何确保派生继承SomeType没有实例化它?

注:如果它有帮助,我想要像where关键字对泛型所做的那样。
编辑:
类似于这个答案,但它是在检查一个对象。我想检查类本身

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

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

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

对于类型相等、继承关系和接口实现,这将如你所期望的那样工作,但是当你在显式/隐式转换操作符之间寻找"可赋值性"时,不能

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

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

试试这个

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

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