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

时间:2014-04-02 12:17:45

标签: c# .net clr

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

3 个答案:

答案 0 :(得分:8)

虽然您将int视为int,但系统知道完全它正在处理的类型,并且可以直接转到方法。一旦您需要在更模糊的情况下使用int(对象的类型未知),您必须boxint转换为object

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

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

答案 1 :(得分:5)

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

如果结构类型覆盖了有问题的虚拟方法,则可以避免装箱,因为可以静态确定方法的位置。

答案 2 :(得分:0)

在C#int中,每个其他对象都派生自object类型,其中包含这些方法。它需要分配多少内存并不重要。这些是c#的最基础知识,我建议你阅读任何C#书或者至少提到这里的问题。