var type1 = typeof (ClassA);
var type2 = typeof (ClassB);
type2
源自type1
?_
bool isDerived = // code....
var type1 = typeof (ClassA);
var type2 = typeof (ClassB);
type2
源自type1
?_
bool isDerived = // code....
var type1 = typeof(ClassA);
var type2 = typeof(ClassB);
bool isDerived = type2.IsSubClassOf(type1);
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 表示相同的类型,或者如果当前 Type 在 c 的继承层次结构中,或者如果当前 Type 是 c 实现的接口,或者如果 c 是泛型类型参数并且当前 Type 表示,则为 true c 的约束之一,或者如果 c 表示值类型并且当前 Type 表示 Nullable(在 Visual Basic 中为 Nullable(Of c))。如果这些条件都不为真,或者 c 为空,则为假。
您可以检查Type.Basetype
(请参阅此处)以查看您继承自哪些类型。
所以你可以写这样的东西:
bool isDerived = type2.BaseType == type1;
感谢 Daniel 指出我的 typeof 错误!
如果您的意图是检查它Type2
是从 派生的类,则Type1
该Type.IsSubclassOf
方法可能是合适的。它返回真:
如果c参数代表的Type和当前Type代表类,当前Type代表的类派生自c代表的类;否则为假。如果 c 和当前 Type 表示同一个类,此方法也返回 false。
在您的示例中,isDerived
可以表示为:
isDerived = type2.IsSubclassOf(type1)