次の方法で共有


変数名はフィールド名と同一にすることはできません

更新 : 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;        
        }    
    }
}