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