我知道C++模板和C#泛型之间存在深刻的差异-前者是编译时实体,必须在编译期间解决,而后者是第一类运行时实体。
尽管如此,我仍然无法看出CLR设计人员为什么没有想出一种方案,最终使CLR泛型类型能够从其泛型类型参数之一派生。毕竟,这将是一个非常有用的功能,我个人非常需要它。
编辑:
我想知道一个硬核问题,修复它会导致如此高的代价来实现这个功能,这正好证明了它还没有被实现。例如,检查这个虚构声明:
class C<T> : T
{
}
作为Eric Lippert所注意到的,如果“ T是一个结构体怎么办? T是一个密封类类型怎么办? T是一个接口类型怎么办? T是C! T是从C派生的类? T是一个具有抽象方法的抽象类型? 如果T的可访问性比C低怎么办? T是System.ValueType怎么办?(您可以拥有一个继承自System.ValueType的非结构体吗?)System.Delegate,System.Enum等等呢?”
正如Eric所说,“这些都是容易、显而易见的问题”。确实,他是正确的。我对一些既不容易也不明显的问题感兴趣,这些问题很难解决。