CA1500 : Les noms de variables ne doivent pas être identiques aux noms de champsCA1500: Variable names should not match field names

TypeNameTypeName VariableNamesShouldNotMatchFieldNamesVariableNamesShouldNotMatchFieldNames
CheckIdCheckId CA1500CA1500
CategoryCategory Microsoft.MaintainabilityMicrosoft.Maintainability
Modification avec ruptureBreaking Change Lorsqu’il est déclenché sur un paramètre qui porte le même nom en tant que champ :When fired on a parameter that has the same name as a field:

Sans rupture - Si le champ et la méthode qui déclare le paramètre ne sont pas visibles en dehors de l’assembly, quelle que soit la modification effectuée.- Non-breaking - If both the field and method that declares the parameter cannot be seen outside the assembly, regardless of the change you make.
Rupture - Si vous modifiez le nom du champ et pouvez être consultés en dehors de l’assembly.- Breaking - If you change the name of the field and can be seen outside the assembly.
-Modification avec rupture - Si vous modifiez le nom du paramètre et la méthode qui le déclare peut être consultée en dehors de l’assembly.- Breaking - If you change the name of the parameter and the method that declares it can be seen outside the assembly.

Lorsqu’il est déclenché sur une variable locale qui a le même nom en tant que champ :When fired on a local variable that has the same name as a field:

Sans rupture - Si le champ ne peut pas être visible en dehors de l’assembly, quelle que soit la modification effectuée.- Non-breaking - If the field cannot be seen outside the assembly, regardless of the change you make.
Sans rupture - Si vous modifiez le nom de la variable locale et que vous ne modifiez pas le nom du champ.- Non-breaking - If you change the name of the local variable and do not change the name of the field.
-Modification avec rupture - Si vous modifiez le nom du champ et que vous pouvez le constater en dehors de l’assembly.- Breaking - If you change the name of the field and it can be seen outside the assembly.

CauseCause

Une méthode d’instance déclare un paramètre ou une variable locale dont le nom correspond à un champ d’instance du type déclarant.An instance method declares a parameter or a local variable whose name matches an instance field of the declaring type. Pour intercepter les variables locales qui enfreignent la règle, l’assembly testé doit être construit à l’aide des informations de débogage et le fichier de base de données (.pdb) du programme associé doit être disponible.To catch local variables that violate the rule, the tested assembly must be built by using debugging information and the associated program database (.pdb) file must be available.

Description de la règleRule description

Lorsque le nom d’un champ d’instance correspond à un paramètre ou un nom de variable locale, le champ d’instance est accessible à l’aide de la this (Me dans Visual BasicVisual Basic) mot clé à l’intérieur du corps de méthode.When the name of an instance field matches a parameter or a local variable name, the instance field is accessed by using the this (Me in Visual BasicVisual Basic) keyword when inside the method body. Lors de la maintenance du code, il est facile de les oublier cette différence et supposent que la paramètre ou la variable locale fait référence au champ d’instance, ce qui entraîne des erreurs.When maintaining code, it is easy to forget this difference and assume that the parameter/local variable refers to the instance field, which leads to errors. Cela est vrai en particulier pour les corps de méthode longs.This is true especially for lengthy method bodies.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, renommez le paramètre/variable ou le champ.To fix a violation of this rule, rename either the parameter/variable or the field.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

L’exemple suivant montre deux violations de la règle.The following example shows two violations of the rule.

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;
      }
   }
}