Condividi tramite


I nomi delle variabili non devono corrispondere ai nomi dei campi

Aggiornamento: novembre 2007

TypeName

VariableNamesShouldNotMatchFieldNames

CheckId

CA1500

Categoria

Microsoft.Maintainability

Breaking Change

In caso di generazione su un parametro che ha lo stesso nome di un campo:

  • Non sostanziale - Se il campo e il metodo che dichiara il parametro non sono visibili all'esterno dell'assembly, a prescindere dalle modifiche apportate.

  • Sostanziale - Se si modifica il nome del campo ed è visibile all'esterno dell'assembly.

  • Sostanziale - Se si modifica il nome del parametro e il metodo che lo dichiara è visibile all'esterno dell'assembly.

In caso di generazione su una variabile locale che ha lo stesso nome di un campo:

  • Non sostanziale - Se il campo non è visibile all'esterno dell'assembly, a prescindere dalle modifiche apportate.

  • Non sostanziale - Se si modifica il nome della variabile locale e non si modifica il nome del campo.

  • Sostanziale - Se si modifica il nome del campo ed è visibile all'esterno dell'assembly.

Causa

Un metodo di istanza dichiara un parametro o una variabile locale il cui nome corrisponde a un campo di istanza del tipo dichiarante. Per intercettare le variabili locali che violano la regola, l'assembly testato deve essere compilato con informazioni di debug e il file di database del programma associato (pdb) deve essere disponibile.

Descrizione della regola

Quando il nome di un campo di istanza corrisponde a un parametro o a un nome di variabile locale, al campo di istanza si accede utilizzando la parola chiave this (Me in Visual Basic) dall'interno del corpo del metodo. Quando si gestisce il codice, è facile dimenticare tale differenza e presupporre che il parametro o la variabile locale si riferisca a un campo di istanza, generando errori in particolare per corpi di metodo di lunga durata.

Correzione delle violazioni

Per correggere una violazione di questa regola, rinominare il parametro/la variabile o il campo.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito vengono illustrate due violazioni di questa regola.

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

Sebbene questa regola non viene applicata sui costruttori, viene applicata sul parametro someField dichiarato nel metodo Init nei modelli comuni indicati di seguito:

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