可变结构的好用途是什么?

Jou*_*aas 6 .net clr struct value-type

所以我知道可变结构/值类型在.Net中被认为是"邪恶的".那为什么可以制作它们呢?对于可变结构有什么好的用途,可以证明在第一时间将功能添加到CLR?

Mar*_*ell 3

一个很好的问题!就我个人而言,我绝对不是一个粉丝,但是有些在 CF/XNA 等上运行的人会盲目地发誓他们需要通过(过度)使用结构来获得额外的性能,这通常涉及它们是可变的。如果直接在数组、公共字段或通过访问结构体,则此参数具有一定的ref价值,但在许多情况下,您可能会因为在堆栈上多次复制过大的结构体而导致堆栈空间被占用。 。

如果您使用的结构体,无论是否可变,并且如果您使用的是序列化,那么完全不可变的结构体可能是一个真正的问题。部分或“冰棒”不变性可以是这里的一个答案,但是对值类型有吸引力的相同框架往往有更多的反射限制,使得私有/基于字段的序列化变得棘手。所以可变很方便。

以上所有都是使用结构体来保存实际上更好地分类为对象的东西的示例。纯粹的价值观不会改变。曾经。所以完全不变性就可以了。

作为最后的想法……不是存在的理由,但它是极好的采访素材,并且非常适合绊倒粗心的人。也许它是由充当顾问的人设计的;p