注释
此内容由 Pearson Education, Inc. 的许可从 框架设计指南:可重用 .NET 库的约定、习惯和模式(第 2 版)重新打印。 该版于2008年出版,此后该书已于 第三版全面修订。 此页上的一些信息可能已过期。
通用值类型通常称为结构体,这是 C# 中的关键词。 本部分提供常规结构设计指南。
❌ 请勿为结构提供无参数构造函数。
遵循此准则,可以创建结构数组,而无需在数组的每个项上运行构造函数。 请注意,C# 不允许结构具有无参数构造函数。
❌ 请勿定义可变值类型。
可变值类型存在几个问题。 例如,当属性 getter 返回值类型时,调用方会收到一个副本。 由于复制是隐式创建的,因此开发人员可能不知道它们正在更改副本,而不是原始值。 此外,某些语言(尤其是动态语言)在使用可变值类型方面存在问题,因为即使是本地变量,在被取消引用后,也会导致生成一个副本。
✔️ 请务必确保将所有实例数据设置为零、false 或 null(视情况而定)的状态有效。
这可以防止在创建结构的数组时意外创建无效实例。
✔️ 请务必在值类型上实现 IEquatable<T>。
值类型上的 Object.Equals 方法会导致装箱,且其默认实现效率不高,因为它使用反射。 Equals 可具有更好的性能,并且可得到实施,这样就不会导致装箱。
❌ 请勿显式扩展 ValueType。 事实上,大多数语言都阻止了这一点。
通常,结构可能非常有用,但只应用于不会频繁装箱的小型单个不可变值。
部分内容 © 2005, 2009 Microsoft 公司。 保留所有权利。
获得皮尔逊教育公司许可后重印自 框架设计准则:可重用 .NET 库的约定、习惯和模式 ,由 Krzysztof Cwalina 和 Brad Abrams 编写,并作为微软 Windows 开发系列中的出版物之一,于 2008 年 10 月 22 日由 Addison-Wesley Professional 出版。