Sdílet prostřednictvím


CA1061: Neskrývejte metody třídy base

TypeName

DoNotHideBaseClassMethods

CheckId

CA1061

Kategorie

Microsoft.Design

Narušující změna

Narušující

Příčina

Odvozený typ deklaruje metodu se stejným názvem a se stejným počtem parametrů jako u jedné z jeho základních metod; jeden nebo více parametrů je základním typem odpovídajícího parametru v rámci základní metody a jakékoliv zbývající parametry obsahují typy, které jsou shodné s odpovídajícími parametry základní metody.

Popis pravidla

Metoda základního typu je skryta identicky pojmenovanou metodou v odvozeném typu, kde je předpis parametrů odvozené metody odlišný od odpovídajících typů v předpisu parametrů základní metody pouze ve slaběji odvozených typech.

Jak vyřešit porušení

Pro vyřešení porušení tohoto pravidla je zapotřebí odstranit nebo přejmenovat metodu, nebo změnit podpis parametru tak, aby metoda neskrývala základní metodu.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje metodu, která porušuje pravidlo.

using System;

namespace DesignLibrary
{
   class BaseType
   {
      internal void MethodOne(string inputOne, object inputTwo)
      {
         Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
      }

      internal void MethodTwo(string inputOne, string inputTwo)
      {
         Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
      }
   }

   class DerivedType : BaseType
   {
      internal void MethodOne(string inputOne, string inputTwo)
      {
         Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
      }

      // This method violates the rule. 
      internal void MethodTwo(string inputOne, object inputTwo)
      {
         Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
      }
   }

   class Test
   {
      static void Main()
      {
         DerivedType derived = new DerivedType();

         // Calls DerivedType.MethodOne.
         derived.MethodOne("string1", "string2");

         // Calls BaseType.MethodOne.
         derived.MethodOne("string1", (object)"string2");

         // Both of these call DerivedType.MethodTwo.
         derived.MethodTwo("string1", "string2");
         derived.MethodTwo("string1", (object)"string2");
      }
   }
}