CA1061: Jangan sembunyikan metode kelas dasar

Properti Nilai
ID Aturan CA1061
Judul Jangan sembunyikan metode kelas induk
Kategori Desain
Perbaikan bersifat merusak atau tidak merusak Merusak
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Jenis turunan mendeklarasikan metode dengan nama yang sama dan dengan jumlah parameter yang sama dengan salah satu metode dasarnya; satu atau beberapa parameter adalah jenis dasar parameter yang sesuai dalam metode dasar; dan parameter yang tersisa memiliki jenis yang identik dengan parameter yang sesuai dalam metode dasar.

Deskripsi aturan

Metode dalam tipe dasar disembunyikan oleh metode dengan nama yang identik dalam tipe turunan ketika tanda tangan parameter dari metode turunan berbeda hanya berdasarkan tipe yang diturunkan lebih lemah daripada tipe yang bersesuaian dalam tanda tangan parameter dari metode dasar.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, hapus atau ganti nama metode, atau ubah tanda tangan parameter sehingga metode tidak menyembunyikan metode dasar.

Kapan harus menekan peringatan

Jangan menyembunyikan peringatan dari aturan ini.

Contoh

Contoh berikut menunjukkan metode yang melanggar aturan.

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();

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