Bagikan melalui


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 8 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 mana dari basis kode yang akan menjalankan aturan ini, berdasarkan aksesibilitasnya. 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

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