为什么C#泛型不能像C ++模板那样从其中一个泛型类型参数派生出来?我的意思是我知道这是不可能的,因为CLR不支持此功能,但是为什么呢?
我知道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)继续所说的那样,“ 那些是容易的,显而易见的 ”。的确,他是对的。我对一些既不容易也不明显的问题的具体例子感兴趣,这很难解决。
胡说叔叔
慕码人2483693
HUX布斯