给定
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<>);
应该是真的.