在以下场景中:
public class A<T> { }
public class B : A<AClass> { }
是否可以在不指定AClass(泛型参数)的情况下确定B是否是a的子类?如:
typeof(B).IsSubclassOf(A<>)
是的,但您必须自己遍历层次结构:
var instance = new B();
Type t = instance.GetType();
bool isA = false;
while(t != typeof(object))
{
if(t.IsGenericType && t.GetGenericTypeDefinition() == typeof(A<>))
{
isA = true;
break;
}
else
{
t = t.BaseType;
}
}
@Lee答案适合在整个基类层次结构中搜索。
如果有人需要确定子类是否继承自单个泛型子类A<T>
Type t = typeof(B);
bool isSubClass = t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefination() == typeof(A<>);
可以使用扩展方法:
public static bool IsSubClassOfEx(Type t, Type baseType)
{
return t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefinition() == baseType;
}
找到了一种简单的方法:if (B.GetType().BaseType.Name == typeof(A<>).Name)