1
var type1 = typeof (ClassA);
var type2 = typeof (ClassB);

type2源自type1?_

bool isDerived = // code....
4

4 回答 4

9
var type1 = typeof(ClassA);
var type2 = typeof(ClassB);
bool isDerived = type2.IsSubClassOf(type1);

Reference: Type.IsSubclassOf Method

于 2013-10-25T10:21:08.070 回答
1
void Main()
{
    var type1 = typeof (ClassA);
    var type2 = typeof (ClassB);
    bool b = type1.IsAssignableFrom(type2);
    Console.WriteLine(b);
}

    class ClassA {}
    class ClassB : ClassA {}

IsAssignableFrom 的行为

如果 c 和当前 Type 表示相同的类型,或者如果当前 Type 在 c 的继承层次结构中,或者如果当前 Type 是 c 实现的接口,或者如果 c 是泛型类型参数并且当前 Type 表示,则为 true c 的约束之一,或者如果 c 表示值类型并且当前 Type 表示 Nullable(在 Visual Basic 中为 Nullable(Of c))。如果这些条件都不为真,或者 c 为空,则为假。

于 2013-10-25T10:14:51.120 回答
1

您可以检查Type.Basetype请参阅此处)以查看您继承自哪些类型。

所以你可以写这样的东西:

bool isDerived = type2.BaseType == type1;

感谢 Daniel 指出我的 typeof 错误!

于 2013-10-25T10:16:08.690 回答
1

如果您的意图是检查它Type2是从 派生的类,则Type1Type.IsSubclassOf方法可能是合适的。它返回真:

如果c参数代表的Type和当前Type代表类,当前Type代表的类派生自c代表的类;否则为假。如果 c 和当前 Type 表示同一个类,此方法也返回 false。

在您的示例中,isDerived可以表示为:

isDerived = type2.IsSubclassOf(type1)
于 2013-10-25T10:26:16.300 回答