Compartir a través de


Los nombres de variable no deben coincidir con los nombres de campo

Actualización: noviembre 2007

     TypeName

VariableNamesShouldNotMatchFieldNames

Identificador de comprobación

CA1500

Category

Microsoft.Maintainability

Cambio problemático

Cuando se desencadena en un parámetro que tiene el mismo nombre que un campo:

  • No problemático: si tanto el campo como el método que declara al parámetro no están visibles fuera del ensamblado, independientemente del cambio que realice.

  • Problemático: si cambia el nombre del campo y está visible fuera del ensamblado.

  • Problemático: si cambia el nombre del parámetro y el método que lo declara está visible fuera del ensamblado.

Cuando se desencadena en una variable local que tiene el mismo nombre que un campo:

  • No problemático: si el campo no está visible fuera del ensamblado, independientemente del cambio realizado.

  • No problemático: si cambia el nombre de la variable local y no cambia el nombre del campo.

  • Problemático: si cambia el nombre del campo y está visible fuera del ensamblado.

Motivo

Un método de instancia declara un parámetro o una variable local cuyo nombre coincide con un campo de instancia del tipo declarativo. Para detectar las variables locales que infringen esta regla, el ensamblado probado se debe generar con información de depuración y el archivo de base de datos de programa asociado (.pdb) debe estar disponible.

Descripción de la regla

Cuando el nombre de un campo de instancia coincide con el de un parámetro o el de una variable local, se tiene acceso al campo de instancia utilizando la palabra this (Me en Visual Basic) desde el interior del cuerpo del método. Al mantener el código, resulta fácil olvidarse de esta diferencia y suponer que el parámetro o la variable local hace referencia al campo de instancia, lo que puede provocar errores. Esto sucede especialmente con cuerpos de método largos.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie el nombre del parámetro o la variable, o el del campo.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El ejemplo siguiente muestra dos infracciones de esta regla.

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

Aunque esta regla no se desencadena en los constructores, se desencadenará en el parámetro someField declarado en el método Init en el siguiente modelo común:

using System;

namespace MaintainabilityLibrary
{    
    class MatchingNames    
    {        
        int someField;

        public MatchingNames(int someField) // Does not violate VariableNamesShouldNotMatchFieldNames             {            
            Init(someField);        
        }

        private void Init(int someField)  // Violates VariableNamesShouldNotMatchFieldNames        
        {            
            this.someField = someField;        
        }    
    }
}