为什么C#将整数类型实现为结构而不是基本类型?

Tam*_*nut 5 c# int

看看这个int类型是如何System.Int32 structC#中实现的,我想知道为什么这样实现(通过将它包装成结构类型),而不是选择Java中的原始类型实现?

结构中的额外包装不会产生额外的性能命中吗?

das*_*ght 6

这里没有"包装" struct.出于所有实际目的,System.Int32 struct 内置的基本类型,在编译器识别它们的意义上,并在处理基元类型的表达式时生成特殊指令.包装int(或任何其他struct内容)的唯一位置是在装箱转换期间,当您想要将intAPI 传递给接受对象的API 时,这是必需的.

Java和C#处理原语的最大区别在于,您可以在用户定义struct类型可以使用的地方使用C#原语,最值得注意的是,在C#泛型参数中,而Java将原语视为完全独立的类型组.

  • @TamasIonut:没有"包装".我猜你是指[拳击/拆箱](https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx)和`int`的开销.但只有将`int`强制转换为`object`才会发生这种情况. (3认同)
  • 明白了,明白了.因此是一种特殊类型的结构,由CLR处理. (2认同)
  • @TamasIonut 这种“更多开销”都不会发生 - `struct` 只是所有值类型(包括基元)的通用名称。编译器对基元有足够的了解,可以在看到它们时生成不同的 CLR 代码,而不是用户定义的“结构”。例如,编译器充分利用 CIL 对内置类型的支持。 (2认同)