属性设计

通常,方法代表操作而属性代表数据。 属性像字段一样使用,这意味着属性不应进行复杂的计算,也不应产生副作用。 有关属性设计的更多信息,请参见 索引属性设计属性更改通知事件

下列准则可帮助确保正确地设计属性。

如果调用方不应当更改属性值,则要创建只读属性。

注意,属性类型的可变性会影响最终用户可以更改的内容。 例如,如果定义一个返回读/写集合的只读属性,则最终用户不能向该属性分配其他集合,但可以修改该集合中的元素。

不要提供仅支持 Set 操作的属性。

如果无法提供属性 getter,可以改用一个方法来实现该功能。 方法名称应以 Set 开头,并按原样后跟属性名。 例如,AppDomain 使用一个名为 SetCachePath 的方法,而不是名为 CachePath 的仅支持 Set 操作的属性。

为所有属性提供适当的默认值,确保属性的默认值不会导致安全漏洞或设计效率非常低下。

允许按任意顺序设置属性,即便这样做会导致出现暂时无效的对象状态也如此。

如果属性 setter 引发异常,则保留以前的值。

避免从属性 getter 中引发异常。

属性 getter 应是没有任何前提条件的简单操作。 如果 getter 可能会引发异常,请考虑将该属性重新设计为方法。 此项建议不适用于索引器。 索引可以因参数无效而引发异常。

在属性 setter 中引发异常是有效并可以接受的。

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

其他资源

成员设计准则

类库开发的设计准则