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:
In caso di generazione su una variabile locale che ha lo stesso nome di un campo:
|
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;
}
}
}