Partilhar via


CA1061: não ocultar métodos de classe base

TypeName

DoNotHideBaseClassMethods

CheckId

CA1061

Categoria

Microsoft.Design

Alteração Significativa

Quebra

Causa

Um tipo derivado declara um método com o mesmo nome e com o mesmo número de parâmetros que um dos métodos de base; um ou mais dos parâmetros for um tipo de base do parâmetro correspondente no método de base; e todos os parâmetros restantes terão os tipos que são idênticos aos parâmetros correspondentes no método de base.

Descrição da Regra

Um método em um tipo de base é ocultado por um método idêntica nomeada em um tipo derivado quando a assinatura do parâmetro de método derivada diferem apenas pelos tipos derivados mais fraco de correspondência na assinatura do parâmetro de método de base.

Como Corrigir Violações

Para corrigir uma violação desta regra, remover ou renomear o método, ou alterar a assinatura do parâmetro de forma que o método não ocultar o método de base.

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

O exemplo a seguir mostra um método que viola a regra.

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