변수 이름은 필드 이름과 달라야 합니다.
업데이트: 2007년 11월
TypeName |
VariableNamesShouldNotMatchFieldNames |
CheckId |
CA1500 |
범주 |
Microsoft.Maintainability |
변경 수준 |
필드와 이름이 같은 매개 변수에서 발생한 경우
필드와 이름이 같은 지역 변수에서 발생한 경우
|
원인
인스턴스 메서드에서 선언 형식의 인스턴스 필드와 이름이 같은 매개 변수나 지역 변수를 선언합니다. 규칙을 위반하는 지역 변수를 찾으려면 테스트되는 어셈블리를 디버깅 정보와 함께 빌드해야 하며 연관된 프로그램 데이터베이스 파일(.pdb)을 사용할 수 있어야 합니다.
규칙 설명
인스턴스 필드의 이름이 매개 변수나 지역 변수 이름과 같은 경우 메서드 본문 내에서는 this(Visual Basic의 경우 Me) 키워드를 사용하여 인스턴스 필드에 액세스합니다. 코드를 유지 관리할 때는 이러한 차이를 잊고 매개 변수/지역 변수가 인스턴스 필드를 참조하므로 오류가 발생한다고 가정하는 것이 쉽습니다. 특히 메서드 본문이 긴 경우에는 더욱 그렇습니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 매개 변수/변수 또는 필드의 이름을 바꿉니다
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
다음 예제에서는 이 규칙을 위반하는 두 가지 경우를 보여 줍니다.
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;
}
}
}