int是32位。所有这些位都用于存储int值。为什么int也可以包含ToString()和GetType()等函数?
答案 0 :(得分:8)
虽然您将int
视为int
,但系统知道完全它正在处理的类型,并且可以直接转到方法。一旦您需要在更模糊的情况下使用int
(对象的类型未知),您必须box将int
转换为object
此时,该框不仅包含int
的实际数据,还包含与引用类型相关的常用内容 - 例如对Type
的引用以允许找到方法。
同样的理论适用于所有价值类型 - 虽然它存储在正确类型的变量中,但 exact 类型是已知的。这就是值类型无法继承或继承的原因 - 因此变量(字段等)的类型会告知系统要使用的确切类型,以及类型,方法。 / p>
答案 1 :(得分:5)
函数本身由方法表指向。在结构上调用虚函数时,首先将结构框装箱以在堆上创建具有对象标头的对象。标题的一个字段指向方法表,并且可以从那里查找要调用的方法。
如果结构类型覆盖了有问题的虚拟方法,则可以避免装箱,因为可以静态确定方法的位置。
答案 2 :(得分:0)
在C#int中,每个其他对象都派生自object
类型,其中包含这些方法。它需要分配多少内存并不重要。这些是c#的最基础知识,我建议你阅读任何C#书或者至少提到这里的问题。