c# - 值类型有 Type 对象吗?

标签 c# .net clr

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

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

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

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

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

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

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

    public void MethodOnValueType()
    {
        // Some code here
    }
}

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

托管堆中是否有值类型的Type Object?

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

谢谢。

最佳答案

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

值类型上没有对象头等。

您可以获得值类型的 Type 对象,但这与方法调用并没有真正的关系。

关于c# - 值类型有 Type 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14012664/

相关文章:

java - 从不同语言调用 Web 服务 (asmx)

c# - 根据关键字剪切音频文件

c# - 双线性序列给出奇怪的结果

c# - 停止多线程 Windows 服务

c# - 如何检测哪个线程正在阻止应用程序在 .NET 中关闭

c# - 从对象构建表达式时为 lambda 声明提供的参数数量不正确

c# - C#中构造OutOfMemoryException没有内存时会发生什么?

clr - .NET 2.0中具有扩展属性的Escape Catch-22

c# - 为什么集合初始化抛出 NullReferenceException

c# - 如何将程序集设置为默认引用?