每一个人都知道,当我们将Struct(Value Type)传递给函数时,等待Object,发生装箱。为什么CLR在完成从结构到对象的投射时做拳击?
但是,结构自ValueType,其从对象继承继承...
实施例:
ArrayList a = new ArrayList();
Point p = new Point(5,6);
a.Add(p);
在此例如对盒装和加入的ArrayList。但p已经是对象(如果你做“p是对象”,你会变成真)。编译器是否检查元数据以查看所有继承层次以查看是否存在ValueType类以知道值类型是否应在堆栈上分配?而且,如果它在继承ValueType的层次结构中找到它,它不会继续看到内部类?
例如:编译器检查点元数据:从谁继承Point? TypeValue!好吧,我不会继续 - 是值类型
,我认为你应该专注于“引用”和“价值”。此外,价值类型没有任何层次结构,因为它们都是封闭的。 –
值类型不是“在堆栈上分配的”。考虑一个整数数组。你相信数组中的所有整数都分配在堆栈上吗?如果是这样,那么数组如何从分配它的方法中返回? –
Eric Lippert先生,你的意思是,因为堆栈是1 MB,它不能包含大数组?这是合乎逻辑的......所以,它被装箱并保存在堆中? – zzfima