.NET中的值类型如何实际工作?

Ale*_*voi 7 c#

我在理解.NET中的值类型表示时遇到问题.每个值类型都派生自System.ValueType类,这是否意味着Value Type是一个类?

例如,如果我写:

int x = 5;
Run Code Online (Sandbox Code Playgroud)

这意味着我创建了一个System.Int32类的实例'将它写入变量x ??

Mik*_*ski 6

System.ValueType类实际上只是一个"元"类,内部处理方式与普通类不同.结构和原始类型隐式继承System.ValueType,但该类型在运行时实际上并不存在,它只是程序集标记类应该被视为值类型结构并采用按值传递语义的一种方式.

与其他答案相反,值类型并不总是在堆栈上分配.当它们是类中的字段时,它们就像实例化该对象时的其余类数据一样位于堆上.在迭代器或闭包中使用时,局部变量也可以提升为隐式类.