Delen via


CA1061: Basisklassemethoden niet verbergen

Eigenschappen Weergegeven als
Regel-id CA1061
Titel Basisklassemethoden niet verbergen
Categorie Ontwerpen
Oplossing is brekend of niet-brekend Breken
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Een afgeleid type declareert een methode met dezelfde naam en met hetzelfde aantal parameters als een van de basismethoden; een of meer van de parameters is een basistype van de bijbehorende parameter in de basismethode; en alle overige parameters hebben typen die identiek zijn aan de bijbehorende parameters in de basismethode.

Beschrijving van regel

Een methode in een basistype wordt verborgen door een identiek benoemde methode in een afgeleid type wanneer de parameterhandtekening van de afgeleide methode alleen verschilt van typen die zwakker zijn afgeleid dan de bijbehorende typen in de parameterhandtekening van de basismethode.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, verwijdert of wijzigt u de methode of wijzigt u de parameterhandtekening, zodat de methode de basismethode niet verbergt.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Opmerking

In het volgende voorbeeld ziet u een methode die de regel schendt.

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