如果我将一个简单的值类型(例如int)分配给ValueType类型的属性,那么该值是否已装箱?
例如,如果我这样做:
int i = 4;
ValueType test = i;
Run Code Online (Sandbox Code Playgroud)
这个价值会被装箱吗?
是的,它会的.这是因为每种类型在运行时占用一定量的内存(int例如,占用4个字节).结构将占用尽可能多的空间来布局内存中的所有字段.
由于您可以存储任何值类型ValueType,并且由于ValueType必须与您指定的类型完全相同test,因此该ValueType类型实际上是一种引用类型.
考虑:
int a = 0;
long b = 1;
ValueType test;
test = a;
test = b;
Run Code Online (Sandbox Code Playgroud)
这是完全有效的代码. test必须占据堆栈上的固定大小,而a和b具有不同的尺寸.希望这澄清了为什么ValueType它本身不能成为一种价值类型.(这与您无法派生值类型的原因有关.)