CA2104:不要声明只读可变引用类型
项 | “值” |
---|---|
RuleId | CA2104 |
Category | Microsoft.Security |
重大更改 | 非中断 |
注意
规则 CA2104 已过时,并将在 Visual Studio 的未来版本中删除。 由于确定一种类型的实际不可变性所需的分析十分复杂,因此它将不会作为分析器实现。
原因
外部可见类型包含外部可见的只读字段,该字段为可变的引用类型。
注意
此规则已被弃用。 有关详细信息,请参阅已弃用的规则。
规则说明
可变类型是实例数据可被修改的类型。 System.Text.StringBuilder 类是可变引用类型的一个示例。 它包含可以更改类实例的值的成员。 System.String 类是不可变引用类型的一个示例。 实例化后,其值永远不会更改。
引用类型字段上的只读修饰符(C# 中的 readonly、Visual Basic 中的 ReadOnly 和 C++ 中的 const)可防止字段被引用类型的不同实例替换。 但是,修饰符不会阻止通过引用字段修改字段的实例数据。
此规则可能会无意中显示一个类型(实际上是不可变的)的冲突。 在这种情况下,可以安全地禁止显示警告。
只读数组字段不受此规则约束,但会违反 CA2105:数组字段不应为只读规则。
如何解决冲突
若要解决此规则冲突,请删除只读修饰符;如果可接受中断性变更,请将字段替换为不可变类型。
何时禁止显示警告
如果字段类型不可变,则可以安全地禁止显示此规则的警告。
示例
以下示例显示了导致此规则违反的字段声明:
反馈
https://aka.ms/ContentUserFeedback。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈