前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1044:属性不应是只写的

CA1044:属性不应是只写的

作者头像
呆呆
发布2022-01-10 09:19:28
1900
发布2022-01-10 09:19:28
举报
文章被收录于专栏:centosDai

规则 ID

CA1044

类别

设计

修复是中断修复还是非中断修复

重大

原因

属性具有 set 访问器,但不具有 get 访问器。

默认情况下,此规则仅查看外部可见的类型,但这是可配置的。

规则说明

Get 访问器提供对属性的读取访问权限,而 set 访问器提供写入访问权限。 虽然可以接受且经常需要使用只读属性,但设计准则禁止使用只写属性。 这是因为允许用户设置值但又禁止该用户查看这个值不能提供任何安全性。 而且,如果没有读访问,将无法查看共享对象的状态,使其用处受到限制。

如何解决冲突

若要解决此规则的冲突,请将 get 访问器添加到属性。 或者,如果需要只写属性的行为,请考虑将该属性转换为方法。

何时禁止显示警告

建议不要禁止显示此规则的警告。

配置代码以进行分析

使用下面的选项来配置代码库的哪些部分要运行此规则。

包含特定的 API 图面

你可以仅为此规则、为所有规则或为此类别中的所有规则配置此选项(设计)。 有关详细信息,请参阅代码质量规则配置选项。

包含特定的 API 图面

你可以根据代码库的可访问性,配置要针对其运行此规则的部分。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:

dotnet_code_quality.CAXXXX.api_surface = private, internal

示例

在下面的示例中,BadClassWithWriteOnlyProperty 是一个具有只写属性的类型。 GoodClassWithReadWriteProperty 包含更正后的代码。

Imports System

Namespace ca1044

Public Class BadClassWithWriteOnlyProperty

Dim someName As String

' Violates rule PropertiesShouldNotBeWriteOnly.

WriteOnly Property Name As String

Set

someName = Value

End Set

End Property

End Class

Public Class GoodClassWithReadWriteProperty

Property Name As String

End Class

End Namespace

public class BadClassWithWriteOnlyProperty

{

string _someName;

// Violates rule PropertiesShouldNotBeWriteOnly.

public string Name

{

set

{

_someName = value;

}

}

}

public class GoodClassWithReadWriteProperty

{

public string Name { get; set; }

}

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档