其他分享
首页 > 其他分享> > 泛型类型定义子类型不反映这样

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

作者:互联网

给定

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<>);

应该是真的.

标签:reflection,inheritance,generics,c
来源: https://codeday.me/bug/20191208/2089884.html