如果int是32位.ToString()和GetType()等函数存储在哪里?

Ren*_*ene 1 .net c# clr

int是32位.所有这些位都用于存储int值.为什么int也包含ToString()和GetType()等函数?

Dam*_*ver 8

虽然您将某个int视为一个int,但系统确切知道它正在处理什么类型,并且可以直接使用这些方法.只要你需要使用一个int更模糊的情况(其中对象的类型是未知的),你有intobject.

此时,该框不仅包含实际数据,int还包含与引用类型相关的常用内容 - 例如Type对允许查找方法的引用.

同样的理论适用于所有值类型 - 虽然它存储在正确类型的变量中,但确切的类型是已知的.这就是值类型无法继承或继承的原因 - 因此变量的类型(字段等)会告知系统要使用的确切类型,以及类型和方法.


Lee*_*Lee 5

函数本身由方法表指向.在结构上调用虚函数时,首先将结构框装箱以在堆上创建具有对象标头的对象.标题的一个字段指向方法表,并且可以从那里查找要调用的方法.

如果结构类型覆盖了所讨论的虚拟方法,则可以避免装箱,因为可以静态地确定方法的位置.