CA1715:标识符应具有正确的前缀

属性
规则 ID CA1715
标题 标识符应具有正确的前缀
类别 命名
修复是中断修复还是非中断修复 中断 - 在接口上引发时。

非中断 - 在泛型类型参数上引发时。
在 .NET 8 中默认启用

原因

接口的名称未以大写的“I”开头。

-或-

类型或方法上的泛型类型参数的名称未以大写的“T”开头。

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

规则说明

按照约定,某些编程元素的名称以特定前缀开头。

接口名称应以大写的“I”开头,后跟另一个大写字母。 此规则报告与接口名称(如“MyInterface”和“IsolatedInterface”)相关的冲突。

泛型类型参数名称应以大写的“T”开头,可选择后跟另一个大写字母。 此规则报告与泛型类型参数名称(如“V”和“Type”)相关的冲突。

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

配置代码以进行分析

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

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

包含特定的 API 图面

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

dotnet_code_quality.CAXXXX.api_surface = private, internal

单字符类型参数

可以配置是否从该规则中排除单字符类型参数。 例如,若要指定此规则不得分析单字符类型参数,请将以下某一键值对添加到项目的 .editorconfig 文件中:

# Package version 2.9.0 and later
dotnet_code_quality.CA1715.exclude_single_letter_type_parameters = true

# Package version 2.6.3 and earlier
dotnet_code_quality.CA2007.allow_single_letter_type_parameters = true

备注

对于名为 T 的类型参数(例如 Collection<T>),不会触发此规则。

如何解决冲突

重命名标识符,使其具有正确的前缀。

何时禁止显示警告

不禁止显示此规则发出的警告。

接口命名示例

以下代码片段显示了一个命名错误的接口:

' Violates this rule
Public Interface Book

    ReadOnly Property Title() As String

    Sub Read()

End Interface
// Violation.
public interface Book
{
    string Title
    {
        get;
    }

    void Read();
}

下面的代码片段通过使用“I”作为接口的前缀来解决之前的冲突:

// Fixes the violation by prefixing the interface with 'I'.
public interface IBook
{
    string Title
    {
        get;
    }

    void Read();
}
' Fixes the violation by prefixing the interface with 'I'
Public Interface IBook

    ReadOnly Property Title() As String

    Sub Read()

End Interface

类型参数命名示例

以下代码片段显示了命名错误的泛型类型参数:

' Violates this rule
Public Class Collection(Of Item)

End Class
// Violation.
public class Collection<Item>
{
}

下面的代码片段通过使用“T”作为泛型类型参数的前缀来解决之前的冲突:

// Fixes the violation by prefixing the generic type parameter with 'T'.
public class Collection<TItem>
{
}
' Fixes the violation by prefixing the generic type parameter with 'T'
Public Class Collection(Of TItem)

End Class