CA1715: Identificadores devem ter um prefixo correto
Property | Valor |
---|---|
ID da regra | CA1715 |
Título | Identificadores devem ter um prefixo correto |
Categoria | Nomenclatura |
A correção é interruptiva ou sem interrupção | Interruptiva: quando acionada em interfaces. Sem interrupção: quando gerada em parâmetros de tipo. |
Habilitado por padrão no .NET 8 | Não |
Causa
O nome de uma interface não começa com 'I' em maiúsculas.
-ou-
O nome de um parâmetro de tipo genérico em um tipo ou método não começa com um 'T' em maiúsculas.
Por padrão, essa regra examina apenas interfaces, tipos e métodos externamente visíveis, mas isso é configurável.
Descrição da regra
Por convenção, os nomes de determinados elementos de programação começam com um prefixo específico.
Os nomes da interface devem começar com um 'I' maiúsculo seguido de outra letra maiúscula. Essa regra relata violações de nomes de interface como 'MyInterface' e 'IsolatedInterface'.
Os nomes de parâmetro de tipo genérico devem começar com um 'T' maiúsculo e, opcionalmente, podem ser seguidos por outra letra maiúscula. Essa regra relata violações para nomes de parâmetros de tipo genérico, como 'V' e 'Type'.
As convenções de nomenclatura fornecem uma aparência comum para bibliotecas destinadas a Common Language Runtime. Isso reduz a curva de aprendizado necessária para novas bibliotecas de software e aumenta a confiança do cliente de que a biblioteca foi desenvolvida por alguém com experiência no desenvolvimento de código gerenciado.
Configurar código para analisar
Use as opções a seguir para configurar em quais partes da base de código essa regra deve ser executada.
Você pode configurar essas opções apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Nomenclatura) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.
Incluir superfícies de API específicas
É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Parâmetros de tipo de caractere único
Você pode configurar se deseja ou não excluir parâmetros de tipo de caractere único dessa regra. Por exemplo, para especificar que essa regra não deve analisar parâmetros de tipo de caractere único, adicione um dos seguintes pares chave-valor a um arquivo .editorconfig em seu projeto:
# 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
Observação
Essa regra nunca é acionada para um parâmetro de tipo chamado T
, por exemplo, Collection<T>
.
Como corrigir violações
Renomeie o identificador para que ele seja prefixado corretamente.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Exemplo de nomenclatura de interface
O snippet de código a seguir mostra uma interface nomeada incorretamente:
' Violates this rule
Public Interface Book
ReadOnly Property Title() As String
Sub Read()
End Interface
// Violation.
public interface Book
{
string Title
{
get;
}
void Read();
}
O snippet de código a seguir corrige a violação anterior prefixando a interface com '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
Exemplo de nomenclatura de parâmetro de tipo
O snippet de código a seguir mostra um parâmetro de tipo genérico nomeado incorretamente:
' Violates this rule
Public Class Collection(Of Item)
End Class
// Violation.
public class Collection<Item>
{
}
O snippet de código a seguir corrige a violação anterior prefixando parâmetro de tipo genérico com '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