Questa documentazione è stata archiviata e non viene gestita.

Non nascondere i metodi di una classe base

TypeName

DoNotHideBaseClassMethods

CheckId

CA1061

Categoria

Microsoft.Design

Breaking Change

Breaking

Un tipo derivato consente di dichiarare un metodo con lo stesso nome e numero di parametri di uno dei relativi metodi base; uno o più parametri sono un tipo base del parametro corrispondente nel metodo base, mentre i rimanenti parametri dispongono di tipi identici ai parametri corrispondenti nel metodo base.

Un metodo di un tipo base è nascosto da un metodo con lo stesso nome in un tipo derivato quando la firma di parametro del metodo derivato differisce solo dai tipi che sono derivati in modo più debole rispetto ai tipi corrispondenti nella firma di parametro del metodo base.

Per correggere una violazione di questa regola, rimuovere o rinominare il metodo oppure modificare la firma di parametro in modo che il metodo non nasconda il metodo base.

Non escludere un avviso da questa regola.

Nell'esempio riportato di seguito viene illustrato un metodo che viola la regola.

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");
      }
   }
}

Mostra: