CA1047: Jangan deklarasikan anggota yang dilindungi dalam jenis yang disegel
Properti | Nilai |
---|---|
ID Aturan | CA1047 |
Judul | Jangan nyatakan anggota yang dilindungi dalam jenis yang disegel |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Jenis publik adalah sealed
(NotInheritable
dalam Visual basic) dan mendeklarasikan anggota yang dilindungi atau jenis berlapis yang dilindungi. Aturan ini tidak melaporkan pelanggaran untuk Finalize metode, yang harus mengikuti pola ini.
Deskripsi aturan
Jenis mendeklarasikan anggota yang dilindungi sehingga jenis yang mewarisi dapat mengakses atau mengganti anggota. Menurut definisi, Anda tidak dapat mewarisi dari jenis yang disegel, yang berarti bahwa metode yang dilindungi pada jenis yang disegel tidak dapat dipanggil.
Pengkompilasi C# memancarkan peringatan CS0628 alih-alih CA1047 untuk situasi ini.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, ubah tingkat akses anggota menjadi privat, atau buat jenis dapat diwariskan.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini. Meninggalkan jenis dalam statusnya saat ini dapat menyebabkan masalah pemeliharaan dan tidak memberikan manfaat apa pun.
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.
Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku untuknya, atau untuk semua aturan dalam kategori ini (Desain) yang berlaku untuk aturan ini. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.
Menyertakan permukaan API tertentu
Anda dapat mengonfigurasi bagian basis kode mana yang akan dijalankan aturan ini, berdasarkan aksesibilitasnya, dengan mengatur opsi api_surface. Misalnya, untuk menentukan bahwa aturan hanya boleh dijalankan pada permukaan API non-publik, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Nota
Ganti bagian XXXX
CAXXXX
dengan ID aturan yang berlaku.
Contoh
Contoh berikut menunjukkan jenis yang melanggar aturan ini.
public sealed class SealedClass
{
protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
Protected Sub MyMethod
End Sub
End Class