CA1051: Não declarar campos de instância visíveis
Property | valor |
---|---|
ID da regra | CA1051 |
Título | Não declarar campos de instância visíveis |
Categoria | Desenho |
A correção está quebrando ou não quebrando | Quebrando |
Habilitado por padrão no .NET 9 | Não |
Motivo
Um tipo tem um campo de instância não privada.
Por padrão, essa regra examina apenas tipos visíveis externamente, mas isso é configurável.
Descrição da regra
O uso principal de um campo deve ser como um detalhe de implementação. Os campos devem ser private
ou internal
e devem ser expostos usando propriedades. É tão fácil acessar uma propriedade quanto acessar um campo, e o código nos acessadores de uma propriedade pode mudar à medida que as características do tipo se expandem sem introduzir alterações ininterruptas.
As propriedades que apenas retornam o valor de um campo privado ou interno são otimizadas para ter um desempenho equivalente ao acesso a um campo; O ganho de desempenho do uso de campos visíveis externamente em vez de propriedades é mínimo. Visível externamente refere-se a public
, protected
e protected internal
(Public
, Protected
e Protected Friend
no Visual Basic) níveis de acessibilidade.
Além disso, os campos públicos não podem ser protegidos por demandas de link. (As demandas de link não se aplicam a aplicativos .NET Core.)
Como corrigir violações
Para corrigir uma violação desta regra, faça o campo private
ou internal
e exponha usando uma propriedade visível externamente.
Quando suprimir avisos
Só suprima esse aviso se tiver certeza de que os consumidores precisam de acesso direto ao campo. Para a maioria dos aplicativos, os campos expostos não fornecem benefícios de desempenho ou manutenção em relação às propriedades.
Os consumidores podem necessitar de acesso ao terreno nas seguintes situações:
- No ASP.NET controles de conteúdo de Web Forms.
- Quando a plataforma de destino faz uso para
ref
modificar campos, como estruturas model-view-viewmodel (MVVM) para WPF e UWP.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA1051
// The code that's violating the rule is on this line.
#pragma warning restore CA1051
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1051.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Incluir ou excluir APIs
Use as opções a seguir para configurar em quais partes da base de código executar essa regra.
Você pode configurar essas opções apenas para esta regra, para todas as regras às quais ela se aplica ou para todas as regras nesta categoria (Design) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração da regra de qualidade de código.
Incluir superfícies de API específicas
Você pode configurar em quais partes da sua base de código executar essa regra, com base em sua acessibilidade. Por exemplo, para especificar que a regra deve ser executada somente na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Excluir estruturas
Você pode excluir struct
(Structure
no Visual Basic) campos de serem analisados.
dotnet_code_quality.ca1051.exclude_structs = true
Exemplo
O exemplo a seguir mostra um tipo (BadPublicInstanceFields
) que viola essa regra. GoodPublicInstanceFields
mostra o código corrigido.
public class BadPublicInstanceFields
{
// Violates rule DoNotDeclareVisibleInstanceFields.
public int instanceData = 32;
}
public class GoodPublicInstanceFields
{
private int instanceData = 32;
public int InstanceData
{
get { return instanceData; }
set { instanceData = value; }
}
}