共用方式為


CA1500:變數名稱不應該與欄位名稱相符

型別名稱

VariableNamesShouldNotMatchFieldNames

CheckId

CA1500

分類

Microsoft.Maintainability

中斷變更

當引發的參數與欄位具有相同名稱時:

  • 非中斷 - 如果無法在組件外看見欄位和宣告該參數的方法時,不管您進行的變更為何。

  • 中斷 - 如果您變更欄位的名稱,而且可以在組件外部看見該欄位。

  • 中斷 - 如果您變更參數的名稱,而在組件外看得到宣告該參數的方法。

當引發的區域變數與欄位具有相同名稱時:

  • 非中斷 - 如果無法在組件外看見欄位時,不管您進行的變更為何。

  • 非中斷 - 如果您變更區域變數的名稱,而沒有變更欄位的名稱。

  • 中斷 - 如果您變更欄位的名稱,而且可以在組件外部看見該欄位。

原因

執行個體方法 (Instance Method) 會宣告參數或區域變數,而其名稱符合宣告型別的執行個體欄位。若要攔截違反該規則的區域變數,則必須使用偵錯資訊建置測試的組件 (Assembly),而且必須可以使用關聯的程式資料庫 (.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;
      }
   }
}