Share via


CA1500: Los nombres de las variables no deben coincidir con los nombres de los campos

Elemento Valor
RuleId CA1500
Category Microsoft.Maintainability
Cambio importante Cuando se desencadena en un parámetro que tiene el mismo nombre que un campo:

- No problemático: si el campo y el método que declara el parámetro no se pueden ver fuera del ensamblado, independientemente del cambio que realice.
- Problemático: si cambia el nombre del campo y se puede ver fuera del ensamblado.
- Problemático: si cambia el nombre del parámetro y el método que lo declara se puede ver 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 se puede ver fuera del ensamblado, independientemente del cambio que realice.
- 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 se puede ver fuera del ensamblado.

Causa

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 variables locales que infringen la regla, el ensamblado probado debe compilarse mediante la información de depuración y el archivo de base de datos de programa (.pdb) asociado debe estar disponible.

Descripción de la regla

Cuando el nombre de un campo de instancia coincide con un nombre de parámetro o de variable local, se obtiene acceso al campo de instancia mediante this (Me en Visual Basic) cuando se encuentra dentro del cuerpo del método. Al mantener el código, es fácil olvidar esta diferencia y asumir que el parámetro o la variable local hacen referencia al campo de instancia, lo que conduce a errores. Esto es cierto especialmente en el caso de cuerpos de método largos.

Cómo corregir infracciones

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

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestran dos infracciones de la regla.

using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;
   
      void SomeMethodOne(int someField) {}
      
      void SomeMethodTwo()
      {
         int someField;
      }
   }
}