CA1721:属性名不应与 get 方法冲突

属性
规则 ID CA1721
标题 属性名不应与 get 方法冲突
类别 命名
修复是中断修复还是非中断修复 重大
在 .NET 8 中默认启用

原因

成员的名称以“Get”开头,且其余部分与属性的名称匹配。 例如,包含名为“GetColor”的方法和名为“Color”的属性的类型将导致规则冲突。 如果使用 ObsoleteAttribute 对属性或方法进行标记,则不会触发此规则。

默认情况下,此规则仅查看外部可见的成员和属性,但这是可配置的。

规则说明

“Get”方法和属性的名称应能够明确区分其功能上的差异。

命名约定为面向公共语言运行时的库提供通用外观。 此一致性缩短了学习新软件库所需的时间,让客户更加相信该库是由拥有开发托管代码专业知识的人员所开发。

如何解决冲突

更改名称,使其与前缀为“Get”的方法名称不匹配。

何时禁止显示警告

不禁止显示此规则发出的警告。 该规则的一个例外是,“Get”方法是由实现 IExtenderProvider 接口所引起。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA1721
// The code that's violating the rule is on this line.
#pragma warning restore CA1721

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA1721.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

配置代码以进行分析

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

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

包含特定的 API 图面

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

dotnet_code_quality.CAXXXX.api_surface = private, internal

示例

下面的示例包含与此规则冲突的方法和属性。

public class Test
{
    public DateTime Date
    {
        get { return DateTime.Today; }
    }

    // Violates rule: PropertyNamesShouldNotMatchGetMethods.
    public string GetDate()
    {
        return this.Date.ToString();
    }
}
Imports System

Namespace ca1721

    Public Class Test

        Public ReadOnly Property [Date]() As DateTime
            Get
                Return DateTime.Today
            End Get
        End Property

        ' Violates rule: PropertyNamesShouldNotMatchGetMethods.
        Public Function GetDate() As String
            Return Me.Date.ToString()
        End Function

    End Class

End Namespace