我想知道是否有任何技术原因导致 .NET 值类型不支持继承(忽略接口(interface)实现)...乍一看我无法想到值类型不允许单一的原因基类继承。
(我的意思是,可以说,如果你最终得到一个巨大的继承层次结构,值类型的继承将是糟糕的,但我主要想知道是否存在任何运行时限制而不是实际限制。)
谢谢。
最佳答案
考虑为值类型分配的内存。 CLR 确切地知道要为值类型的变量分配多少空间,因为它知道将有哪些字段。它不可能以包含更多字段的子类型值结束。
现在我们可以拥有值类型继承,它只是截断了一些东西:
ExtendedValueType evt = new ExtendedValueType(...);
BaseValueType bvt = evt;
// Now you couldn't cast back to ExtendedValueType, because we'd have lost
// information
同样,类型信息也无处存在于值本身中,因此任何被扩展类型覆盖的虚方法都不会通过 bvt
调用,因为就一切而言,值那么只是 BaseValueType
的值。换句话说,很多“自然”的继承特性会以一种我认为会引起很多困惑的方式缺失。
关于c# - .NET:值类型继承 - 技术限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984008/