Compartilhar via


CA1061: Não ocultar métodos da classe base

TypeName

DoNotHideBaseClassMethods

CheckId

CA1061

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Quebrando

Causa

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

Descrição da regra

Um método em um tipo base fica oculto por um método com nomes idênticos em um tipo derivado, quando a assinatura de parâmetro do método derivado difere somente pelos tipos que são mais rigidez derivado do que os tipos correspondentes na assinatura do parâmetro do método base.

Como corrigir violações

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

Quando suprimir avisos

Não suprimir um aviso da 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");
      }
   }
}