Compartilhar via


Não ocultar métodos da classe base

TypeName

DoNotHideBaseClassMethods

CheckId

CA1061

Category (Categoria)

Microsoft.Design

Quebrando alterar

Quebrando

Causa

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

Descrição da regra

Um método em um tipo de base está oculta por um método com nome idêntico em um tipo derivado quando a assinatura de parâmetro do método derivado difere somente pelos tipos que são mais weakly derivada do que os tipos correspondentes na assinatura do parâmetro do método base.

Como corrigir violações

Para corrigir uma violação dessa 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");
      }
   }
}