Compartir a través de


CA1061: No oculte métodos de clases base

TypeName

DoNotHideBaseClassMethods

Identificador de comprobación

CA1061

Categoría

Microsoft.Design

Cambio problemático

Problemático

Motivo

Un tipo derivado declara un método con el mismo nombre y el mismo número de parámetros que uno de sus métodos base; uno o varios de los parámetros es un tipo base del parámetro correspondiente en el método base; y los parámetros restantes tienen tipos idénticos a los de los parámetros correspondientes del método base.

Descripción de la regla

Un método de un tipo base está oculto por un método del mismo nombre en un tipo derivado, cuando la firma del parámetro del método derivado sólo se diferencia por tipos derivados de manera más débil que los tipos correspondientes de la firma del parámetro del método base.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite el método o cámbiele el nombre, o bien cambie la firma del parámetro de modo que el método no oculte el método base.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El siguiente ejemplo muestra un método que infringe la regla.

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