Jes*_*kan 86
编辑:显然,这篇文章存在严重的编辑问题.见评论部分.
两者兼而有之.
从哲学上讲,它可以解决 - 有些类是面向对象编程的"真正"构建块,并且有一些结构,它们是用于存储的轻量级数据类型,但允许类似对象的方法调用以获得熟悉和方便.
从技术上讲,作为"值类型"意味着整个结构 - 所有内容 - (通常)存储在您拥有变量或该类型成员的任何地方.作为局部变量或函数参数,这意味着在堆栈上.对于成员变量,这意味着完全存储为对象的一部分.
作为继承是一个问题的(主要)示例,如果允许结构具有包含更多成员的子类型,请考虑如何在较低级别影响存储.存储该结构类型的任何东西都会根据它最终包含的子类型占用可变数量的内存,这将是一个分配的噩梦.给定类的对象在编译时不再具有常量的已知大小,并且对于任何方法调用的堆栈帧都是如此.对于具有在堆上分配存储的对象而言,这不会发生,而是对堆栈上或其他对象内的存储具有恒定大小的引用.
这只是一个直观的,高级别的解释 - 查看扩展和更精确信息的评论和其他答案.
Dar*_*rov 37
因为它是.NET中表示结构的方式.它们是值类型,值类型没有允许继承的方法表指针.
Rob*_*son 16
您可以找到SO问题的答案为什么.NET值类型被密封?相关.在其中,@ logicnp指的是ECMA 335,其中指出:
8.9.10值类型继承
- [...]
- 将密封以避免处理价值切片的并发症.
- 此处指定的限制性规则允许更有效的实施,而不会严重损害功能.
| 归档时间: | 
 | 
| 查看次数: | 63428 次 | 
| 最近记录: |