从 MSDN 中它说“值类型是在堆栈上或内联上分配的。 ”
“内联分配”是否意味着值类型可以在声明后立即分配?说如果它是在一个Heap中声明的,那么它是在下一个Heap slot中分配的?
那为什么说“在一个结构中”?
更新
如果“结构”特指“结构”,为什么它没有提及“类”?作为 a 中的字段Class
,它不在堆栈上,也不在 a 中内联struct
,(它在 a 中内联class
)。
从 MSDN 中它说“值类型是在堆栈上或内联上分配的。 ”
“内联分配”是否意味着值类型可以在声明后立即分配?说如果它是在一个Heap中声明的,那么它是在下一个Heap slot中分配的?
那为什么说“在一个结构中”?
如果“结构”特指“结构”,为什么它没有提及“类”?作为 a 中的字段Class
,它不在堆栈上,也不在 a 中内联struct
,(它在 a 中内联class
)。
它们在结构中内联分配,因此作为已分配给结构的内存的一部分。
看:
http://msdn.microsoft.com/en-us/library/system.valuetype.aspx
如果您有嵌套值类型,则内部类型将分配在已为包含类型分配的内存中。
struct Inner
{
public int A;
}
struct Outer
{
public Inner I;
public int B;
}
Outer o = new Outer();
o.I = new Inner();
内存I
是内联分配的,在分配给 的实例的内存中Outer
。
将结构视为最简单的方法是将一组存储位置用胶带粘在一起。声明一个变量或字段Point foo;
本质上等同于说int Point_X; int Point_Y;
。说foo = bar;
,当两者都是类型时Point
,本质上等同于说foo_X = bar_X; foo_Y = bar_Y;
。将结构作为值参数传递本质上等同于将其所有字段(公共和私有)作为值参数传递。
有两种结构方式和一种主要是语法糖的方式,其中结构不仅仅是用胶带粘在一起的一组字段:
类类型与结构非常不同。如果一个人声明了一个具有字段 P 和 Q 的类,并且一个人声明了该类类型的存储位置,那么该存储位置将不会保存两个东西(P 和 Q)。它只会保存一件事——对存储在其他地方的对象的引用,该对象本身具有字段 P 和 Q。