检查一个System.Type对象是从另一个System.Type对象派生的

时间:2013-10-25 10:12:28

标签: c#

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

type2来自type1

bool isDerived = // code....

4 个答案:

答案 0 :(得分:8)

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

Reference: Type.IsSubclassOf Method

答案 1 :(得分:1)

void Main()
{
    var type1 = typeof (ClassA);
    var type2 = typeof (ClassB);
    bool b = type1.IsAssignableFrom(type2);
    Console.WriteLine(b);
}

    class ClassA {}
    class ClassB : ClassA {}

Behaviour of IsAssignableFrom

  

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

答案 2 :(得分:1)

您可以查看Type.Basetypesee here),了解您继承的类型。

所以你可以这样写:

bool isDerived = type2.BaseType == type1;

感谢Daniel用typeof指出我的错误!

答案 3 :(得分:1)

如果您的目的是检查Type2是否来自Type1,则Type.IsSubclassOf方法可能是合适的。它返回true:

  

如果由c参数表示的Type和当前Type表示类,并且当前Type表示的类派生自c表示的类;否则,错误。如果c和当前Type表示同一个类,则此方法也返回false。

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

isDerived = type2.IsSubclassOf(type1)