给出
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<>));
第一个是有意义的(直到具体它们不可分配)。但为什么这个行为会另外两个?
答案 0 :(得分:2)
SubGeneric<T>
继承Generic<T>
,而不是Generic<>
如果继承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<>);
应该是真的。
答案 1 :(得分:1)
我认为在给出T
之前这些断言是没有意义的。
SubGeneric<T>
是Generic<T>
的子类,但SubGeneric<>
和Generic<>
(没有任何T
)根本不是类,不能从每个类派生一个其他,或者可能意味着任何SubGeneric<U>
可能是Generic<V>
的子类,这显然是不正确的。
答案 2 :(得分:0)
我认为这与通用参数有关。
SubGeneric<string>
不是Generic<int>
因此,在不知道泛型参数的情况下,无法进行推理。
typeof(SubGeneric<int>).IsSubclassOf(typeof(Generic<int>));
typeof(SubGeneric<string>).BaseType.Equals(typeof(Generic<string>));
应该返回true
。