Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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");
}
}