CA1044:属性不应是只写的
属性 | 值 |
---|---|
规则 ID | CA1044 |
标题 | 属性不应是只写的 |
类别 | 设计 |
修复是中断修复还是非中断修复 | 重大 |
在 .NET 9 中默认启用 | 否 |
原因
属性具有 set 访问器,但不具有 get 访问器。
默认情况下,此规则仅查看外部可见的类型,但这是可配置的。
规则说明
Get 访问器提供对属性的读取访问权限,而 set 访问器提供写入访问权限。 虽然可以接受且经常需要使用只读属性,但设计准则禁止使用只写属性。 这是因为允许用户设置值但又禁止该用户查看这个值不能提供任何安全性。 而且,如果没有读访问,将无法查看共享对象的状态,使其用处受到限制。
如何解决冲突
若要解决此规则的冲突,请将 get 访问器添加到属性。 或者,如果需要只写属性的行为,请考虑将该属性转换为方法。
何时禁止显示警告
建议不要禁止显示此规则的警告。
配置代码以进行分析
使用下面的选项来配置代码库的哪些部分要运行此规则。
可以仅为此规则、为适用的所有规则或为适用的此类别(设计)中的所有规则配置此选项。 有关详细信息,请参阅代码质量规则配置选项。
包含特定的 API 图面
你可以通过设置 api_surface 选项来配置要基于可访问性对代码库的哪些部分运行此规则。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:
dotnet_code_quality.CAXXXX.api_surface = private, internal
注意
将 CAXXXX
的 XXXX
部分替换为适用规则的 ID。
示例
在下面的示例中,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; }
}