다음을 통해 공유


변수 이름은 필드 이름과 달라야 합니다.

업데이트: 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;        
        }    
    }
}