Megosztás a következőn keresztül:


CA1061: Ne rejtse el az alaposztály-metódusokat

Tulajdonság Érték
Szabályazonosító CA1061
Cím Ne rejtse el az alaposztály-metódusokat
Kategória Design
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A származtatott típus ugyanazzal a névvel deklarál egy metódust, amely ugyanolyan számú paraméterrel rendelkezik, mint az egyik alapmetódusa; egy vagy több paraméter a megfelelő paraméter alaptípusa az alapmetódusban; és a fennmaradó paraméterek olyan típusok, amelyek megegyeznek az alapmetódus megfelelő paramétereinek típusával.

Szabály leírása

Az alaptípusban lévő metódusokat egy azonos nevű metódus rejti el egy származtatott típusban, ha a származtatott metódus paraméteraditványa csak olyan típusok szerint különbözik, amelyek gyengébben származnak, mint az alapmetódus paraméter-aláírásában szereplő megfelelő típusok.

Szabálysértések kijavítása

A szabály megsértésének kijavításához távolítsa el vagy nevezze át a metódust, vagy módosítsa a paraméter-aláírást, hogy a metódus ne rejtse el az alapmetódust.

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa el a szabály figyelmeztetését.

Példa

Az alábbi példa egy olyan módszert mutat be, amely megsérti a szabályt.

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