更新 : 2007 年 11 月
TypeName |
VariableNamesShouldNotMatchFieldNames |
CheckId |
CA1500 |
カテゴリ |
Microsoft.Maintainability |
互換性に影響する変更点 |
フィールドと同じ名前のパラメータで発生した場合
フィールドと同じ名前のローカル変数で発生した場合
|
原因
インスタンスのメソッドで、宣言型のインスタンス フィールドと名前が一致するパラメータまたはローカル変数が宣言されています。規則に違反するローカル変数をキャッチするには、デバッグ情報を使用してテスト対象のアセンブリを構築し、関連するプログラム データベース (.pdb) ファイルを使用できる必要があります。
規則の説明
インスタンス フィールドの名前がパラメータまたはローカル変数の名前と一致する場合、メソッドの本文では this (Visual Basic では Me) キーワードを使用してインスタンス フィールドにアクセスします。この違いは、コードを保守する際に忘れやすく、パラメータまたはローカル変数がインスタンス フィールドを参照していると推測してしまうと、エラーの原因となります。特にメソッドの本文が長い場合、このようなことが起きやすくなります。
違反の修正方法
この規則違反を修正するには、パラメータまたは変数の名前、あるいはフィールドの名前のどちらかを変更します。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
この規則の 2 つの違反例を次に示します。
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;
}
}
}
この規則はコンストラクタには適用されませんが、次の共通のパターンの Init メソッドで宣言される someField パラメータには適用されます。
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;
}
}
}