CA1061: Jangan sembunyikan metode kelas dasar
Properti | Nilai |
---|---|
ID Aturan | CA1061 |
Judul | Jangan sembunyikan metode kelas dasar |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | Sebagai saran |
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 jenis dasar disembunyikan oleh metode bernama identik dalam jenis turunan ketika tanda tangan parameter metode turunan hanya berbeda berdasarkan jenis yang lebih lemah diturunkan daripada jenis yang sesuai dalam tanda tangan parameter 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 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");
}
}