泛型类型定义子类型不反映这样

给定

public class Generic<T> {}
public class SubGeneric<T> : Generic<T> {}

以下所有错误:

typeof(Generic<>).IsAssignableFrom(typeof(SubGeneric<>));
typeof(SubGeneric<>).IsSubclassOf(typeof(Generic<>));
typeof(SubGeneric<>).BaseType.Equals(typeof(Generic<>));

第一个是有道理的(直到它们不可分配为止).但是为什么在其他两个行为上呢?

解决方法:

亚通用T继承Generic T,而非GenericT.

如果它继承了Generic,它将无法传达足够的信息.
考虑一下之间的区别

class Wierd<T1, T2> : Generic<T1> { }

class Wierd<T1, T2> : Generic<T2> { }

甚至

class Wierd<T1, T2> : Generic<Wierd<T2, T1>> { }

BaseType包括基本类型的特定参数化.

typeof(SubGeneric<>).BaseType.GetGenericArguments()将返回包含SubGeneric的通用类型参数(< T>)的数组.

typeof(SubGeneric<>).BaseType.GetGenericTypeDefinition() == typeof(Generic<>);

应该是真的.

上一篇:c#泛型继承,而类类型被继承


下一篇:java-JPanel添加问题