C# ValueType为什么是抽象类

C# ValueType为什么是抽象类,c#,language-design,C#,Language Design,System.Object-->System.ValueType--> 系统。枚举, System.Int16, System.Int32, System.Int64 ValueType是一个抽象类ValueType,但为什么Int16、Int32、Int64都是struct 另一个问题是,为什么这些结构是从System.ValueType继承的,为什么不是从对象类本身继承的? 从我的研究中,我只了解到System.ValueType的作用是确保在堆栈上而不是垃圾收集堆上分配派生类型。为什么它们

System.Object-->System.ValueType--> 系统。枚举, System.Int16, System.Int32, System.Int64

ValueType是一个抽象类ValueType,但为什么Int16、Int32、Int64都是struct

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

为什么它们是对象?关键是要扔掉
对象
带来的行李(vtable,一切),并保持对象的轻量级,以便在需要时可以复制它

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


忘记堆和堆栈,它们是C++中的概念,现在你使用C语言。所有内容都存在于各种垃圾收集队列(或寄存器中,尤其是x64编译器)。

值类型和引用类型之间的差异是OO编程的基本原则。为什么?“因为他们就是这样做的”。这个问题可能会有帮助。。。不完全相同,但很接近。除了vtable之外,“摆脱行李对象带来的”还有什么您正在谈论的事情?请您具体说明一下!ValueType轻量级对象类的另一个特点是什么?它对一个对象是不可变的,所以并行化非常简单、便宜和安全。它是轻量级的,因为它实际上只有您需要的数据,没有vtable,没有监视器(
lock
),什么都没有。如果使用得当,值类型可以大大提高应用程序的性能(但很少有人正确使用它们)。@Blindy什么是不可变的?你肯定不是在说c#structs。。。不幸的是,它们是可变的…@Alexei,对,我的意思是使用值类型最常用的方法是通过设计使它们不可变。它们往往非常有用,因为没有
对象使用的额外内存,短寿命对象很快就会被收集。你当然是对的,它们不一定是一成不变的。