var type1 = typeof (ClassA);
var type2 = typeof (ClassB);
type2
来自type1
?
bool isDerived = // code....
答案 0 :(得分:8)
var type1 = typeof(ClassA);
var type2 = typeof(ClassB);
bool isDerived = type2.IsSubClassOf(type1);
答案 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 {}
如果c和当前Type表示相同的类型,或者如果是,则为true current Type位于c的继承层次结构中,如果是当前的 Type是c实现的接口,或者c是泛型类型 参数和当前Type表示c的约束之一, 或者如果c表示值类型且当前Type表示 Nullable(在Visual Basic中为Nullable(Of c))。如果没有这些,则为false 条件为真,或者如果c为空。
答案 2 :(得分:1)
您可以查看Type.Basetype
(see 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)