为什么 ValueType 是抽象的 class

Why ValueType is an abstract class

System.Object--> System.ValueType--> System.Enum, System.Int16, System.Int32, System.Int64...

ValueType 是抽象的class ValueType,但为什么 Int16、Int32、Int64 被构造成结构体?

另外一个问题是,为什么这些结构是从 System.ValueType 继承的,而不是从对象 class 本身继承的? 从我的研究中我明白了这一点,System.ValueType 的作用是确保派生类型分配在堆栈上而不是垃圾收集堆上。

为什么它们会是对象?重点是摆脱 Object 带来的包袱(vtable,一切)并保持一个轻量级的对象,你可以在需要时复制它。

像整数这样的基本类型是值类型的主要候选者,因为它们适合寄存器并且很容易传递。

忘记堆和堆栈吧,它们是 C++ 中的不确定概念,您现在使用的是 C#。一切都存在于各种垃圾收集队列中(或寄存器中,尤其是对于 x64 编译器)。