CA1500: Nomes de variáveis não devem corresponder a nomes de campo

TypeName

VariableNamesShouldNotMatchFieldNames

CheckId

CA1500

<strong>Categoria</strong>

Microsoft.Maintainability

Alteração significativa

Quando acionado em um parâmetro que tem o mesmo nome de um campo:

  • Não-separável - se o campo e o método que declara o parâmetro não podem ser vistos fora do assembly, independentemente da alteração feitas.

  • Quebrando - se você alterar o nome do campo e pode ser vistos fora do assembly.

  • Quebrando - se você alterar o nome do parâmetro e o método que declara que ele pode ser visto de fora do assembly.

Quando disparado em uma variável local que tem o mesmo nome de um campo:

  • Não-separável - se o campo não pode ser visto fora do assembly, independentemente da alteração feita.

  • Não-separável - se você alterar o nome da variável local e não altera o nome do campo.

  • Quebrando - se você alterar o nome do campo e podem ser visto fora do assembly.

Causa

Um método de instância declara um parâmetro ou uma variável local cujo nome corresponde a um campo de instância do tipo declarativo. Para capturar as variáveis locais que violam a regra, o assembly testado deve ser construído usando as informações de depuração e o arquivo de banco de dados (. PDB) do programa associado deve estar disponível.

Descrição da regra

Quando o nome de um campo de instância corresponde a um parâmetro ou um nome de variável local, o campo de instância é acessado usando o this (Me na Visual Basic) palavra-chave quando dentro do corpo do método. Quando a manutenção do código, é fácil esquecer essa diferença e assumir que a variável de parâmetro/local se refere ao campo de instância, o que leva a erros. Isso vale especialmente para os corpos de método demorado.

Como corrigir violações

Para corrigir uma violação desta regra, renomear a variável de parâmetro/ou em campo.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

O exemplo a seguir mostra duas violações da regra.

Imports System

Namespace MaintainabilityLibrary

   Class MatchingNames

      Dim someField As Integer

      Sub SomeMethodOne(someField As Integer)
      End Sub

      Sub SomeMethodTwo()
         Dim someField As Integer
      End Sub

   End Class

End Namespace
using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;

      void SomeMethodOne(int someField) {}

      void SomeMethodTwo()
      {
         int someField;
      }
   }
}