值类型有 Type 对象吗?

Din*_*esh 5 .net c# clr

我确定标题是否具有解释性,但我需要一些帮助来理解这个概念。

我们有类(引用类型),它具有与 Type 对象关联的方法表。除了方法表之外,类型对象还包含所有静态字段、类型 obj 指针和同步块索引。

在引用类型的实例上调用方法时,CLR 会引用此方法表。

方法表包含用于更改实例字段状态的特定方法的 IL。

类似地,我们可以为结构(值类型)定义方法。

在运行时,当在值类型上调用方法时,CLR 从何处引用在值类型的实例上调用的方法的 IL。

struct A
{
    // for Immutability of value type
    public readonly int a;

    public void MethodOnValueType()
    {
        // Some code here
    }
}
Run Code Online (Sandbox Code Playgroud)

CLR 在哪里引用查找名为“MethodOnValueType”的方法的 IL?

托管堆中的值类型是否有任何类型对象?

我确定引用类型的情况,但对值类型感到困惑。

谢谢。

Mar*_*ell 1

值类型上的方法不支持多态性(从对象继承的方法除外,这些方法根据是否被重写而执行方式不同):调用是静态调用(不是虚拟调用)。基本上,调用信息的“什么方法”部分由编译器解析并烧录到 IL 中。然后 JIT 的工作就是将该调用连接到最终的方法代码。

值类型上没有对象头等。

您可以获取值类型的 Type 对象,但这与方法调用并不真正相关。