我相信如果标题是解释性的,但我需要一些帮助来理解这个概念。值类型是否有Type对象?
我们有与类型对象关联的方法表的类(引用类型)。 除了方法表之外,类型对象还包含所有的静态字段,类型为obj指针和同步块索引。
当调用参考类型的实例时,CLR引用此方法表。
方法表包含用于更改实例字段状态的特定方法的IL。
同样,我们可以定义结构的方法(值类型)。
在运行时,当在值类型上调用方法时,CLR从哪里引用在值类型的实例上调用的方法的IL。
struct A
{
// for Immutability of value type
public readonly int a;
public void MethodOnValueType()
{
// Some code here
}
}
哪里CLR是指发现IL名为 “MethodOnValueType” 的方法?
是否有托管堆中的值类型,任何类型的对象?
我确定参考类型的情况,但值类型混淆。
谢谢。
先生纠正我,如果我错了 - >值类型的方法不支持多态性,因为值类型是密封的,不能从派生。因此,CLR的虚拟方法被CLR知道是非实际的,因为它知道该方法是在值类型上调用的。但是它由结构本身定义的方法的IL呢?在运行时存储在哪里JIT会在结构的任何实例上调用方法时将它们转换为本地代码? – Dinesh
@Dnsh作为汇编元数据中的IL:无非就是如此。调用指令只是简单地给所需的方法添加一个标记 - 它并没有内联 –
@Dnsh同样,静态与封闭与多态之间的选择都是相互关联的 - 说哪个是原因,哪个后果很复杂 –