重要的是要注意,尽管类通常有助于在属性中包装字段,但对于结构来说这通常会适得其反 . 关于结构使用的许多建议限制源于假设所有结构域都将包含在属性中 . 如果struct的语义提供:
其状态完全由固定数量的参数定义,所有这些参数都公开公开以供阅读 .
这些参数可以自由分配任何对其各自类型合法的值组合 .
结构的默认实例被指定为将所有参数初始化为其各自类型的默认值 .
然后暴露字段会暴露数据类型的"inner workings",但是这种曝光不会排除对数据类型的任何有意义的未来更改,这些更改尚未被规范排除 . 存储在可修改位置的所有结构的所有字段总是暴露出来进行变异,即使唯一的变异方法是从一个实例到另一个实例的所有公共和私有字段的批量副本 . 如果结构的语义要求代码能够创建一个实例,其定义参数具有值的任意组合,而没有限制,那么公开struct 's fields directly won' t允许单线程代码执行任何它无法做到的事情 . 是:
执行得更快
更清楚地表达其意图
已经在多线程场景中定义了语义,否则语义会变得模糊不清
我并不认为要求类型的消费者运行速度较慢,写得笨拙,并且具有模糊的多线程语义 .
请注意,如果有一个策略反对使用具有变异'this'的属性的结构,而不是封装所有结构字段的策略,那么声明如下:
myListOfPoint[4].X = 5;
即使语言允许在只读结构上调用属性设置器,也会被拒绝(假设目的是为了像
myArraySegment[3] = 9;
这将被理解为访问 myArraySegment 持有引用的数组 .