CA1500: Nazwy zmiennych nie powinny odpowiadać nazwom pól

Pozycja Wartość
Ruleid CA1500
Kategoria Microsoft.Maintainability
Zmiana powodująca niezgodność Po uruchomieniu na parametrze o takiej samej nazwie jak pole:

- Niezgodność — jeśli zarówno pole, jak i metoda, która deklaruje parametr nie mogą być widoczne poza zestawem, niezależnie od wprowadzania zmian.
- Niezgodność — jeśli zmienisz nazwę pola i będzie można je zobaczyć poza zestawem.
- Niezgodność — jeśli zmienisz nazwę parametru i metodę, która deklaruje, że może być widoczna poza zestawem.

Po uruchomieniu w zmiennej lokalnej, która ma taką samą nazwę jak pole:

- Niezgodność — jeśli pole nie może być widoczne poza zestawem, niezależnie od wprowadzania zmian.
- Niezgodność — jeśli zmienisz nazwę zmiennej lokalnej i nie zmienisz nazwy pola.
- Niezgodność — jeśli zmienisz nazwę pola i będzie można go zobaczyć poza zestawem.

Przyczyna

Metoda wystąpienia deklaruje parametr lub zmienną lokalną, której nazwa pasuje do pola wystąpienia typu deklarowanego. Aby przechwycić zmienne lokalne naruszające regułę, testowany zestaw musi zostać skompilowany przy użyciu informacji debugowania, a skojarzony plik bazy danych programu (.pdb) musi być dostępny.

Opis reguły

Gdy nazwa pola wystąpienia jest zgodna z parametrem lub nazwą zmiennej lokalnej, do pola wystąpienia uzyskuje się dostęp przy użyciu słowa kluczowego this (Me w Visual Basic) w treści metody. Podczas obsługi kodu można łatwo zapomnieć o tej różnicy i założyć, że parametr/zmienna lokalna odnosi się do pola wystąpienia, co prowadzi do błędów. Dotyczy to szczególnie długich ciał metod.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zmień nazwę parametru/zmiennej lub pola.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

W poniższym przykładzie przedstawiono dwa naruszenia reguły.

using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;
   
      void SomeMethodOne(int someField) {}
      
      void SomeMethodTwo()
      {
         int someField;
      }
   }
}