System.Drawing.Point是一种值类型.为什么?

Bas*_*mme 3 .net c# types

我读到System.Drawing.Point是一个值类型.我不明白.为什么?

Jul*_*lia 9

微软试图遵循这些规则,他们在MSDN中很好地解释它们,参见在类和结构之间选择(这本书更好,因为它有很多有趣的评论)

即使Point不是这样的好例子:

  • Struct应逻辑上表示单个值(在这种情况下是一个位置,即使它有2个组件,但复数也可以分为2个部分,它们是结构的主要候选者)
  • Struct的实例大小应小于16个字节.(好的,2x4 = 8)
  • 结构不应经常装箱.(好吧这个是对的)
  • 但是,结构应该是不可变的(这是他们不遵循自己的规则的部分,但我想微观优化获得了规则,无论如何都是后来写的)

正如我所说,我猜他们没有尊重"不可变"部分这一事实是因为在编写System.Drawing时没有规则,因为图形操作可能对此非常敏感.

我不知道他们是否正确,也许他们测量了一些常见的算法,发现他们在分配临时对象和复制它们时失去了太多的性能.无论如何,只有在仔细测量类/结构的实际使用之后才能进行这样的优化.