Freigeben über


CA1061: Basisklassenmethoden nicht ausblenden

TypeName

DoNotHideBaseClassMethods

CheckId

CA1061

Kategorie

Microsoft.Design

Unterbrechende Änderung

Breaking

Ursache

Ein abgeleiteter Typ deklariert eine Methode mit demselben Namen und derselben Anzahl an Parametern als eine seiner Basismethoden. Mindestens einer der Parameter ist ein Basistyp des entsprechenden Parameters in der Basismethode. Alle verbleibenden Parameter weisen Typen auf, die mit den entsprechenden Parametern in der Basismethode identisch sind.

Regelbeschreibung

Eine Methode in einem Basistyp wird durch eine Methode mit identischem Namen in einem abgeleiteten Typ verdeckt, wenn die Parametersignatur der abgeleiteten Methode sich nur hinsichtlich der Typen unterscheidet, die schwächer abgeleitet sind als die entsprechenden Typen in der Parametersignatur der Basismethode.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu behandeln, können Sie die Methode entfernen oder umbenennen oder die Parametersignatur so ändern, dass die Basismethode von der Methode nicht verdeckt wird.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Im folgenden Beispiel wird eine Methode veranschaulicht, die gegen die Regel verstößt.

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