c# - .NET:值类型继承 - 技术限制?

标签 c# .net runtime internals value-type

我想知道是否有任何技术原因导致 .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/

相关文章:

C# WCF 客户端需要很长时间才能打开状态 (DuplexClientBase<T>.Open())

c# - 异步提交或回滚事务范围

.net - 创建具有超时的任务

c# - 如何在AppDomain内的程序集中调用静态方法

c# - 抽象类是一种接口(interface)吗?

c# - 使用 2 个表单时是否需要两次单独的 InvokeRequired 检查?

c# - 如何确定是否指定了 PowerShell Cmdlet 参数值?

c# - System.Diagnostics.Trace - 记录异常的正确方法

Azure 数据工厂 - 适用于 Linux 盒的集成运行时

node.js - 是否可以让服务器运行 node.js 以在运行时安装和运行模块?