CA1012: Jenis abstrak tidak boleh memiliki konstruktor publik
Properti | Nilai |
---|---|
ID Aturan | CA1012 |
Judul | Jenis abstrak tidak boleh memiliki konstruktor publik |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Jenisnya abstrak dan memiliki konstruktor publik.
Secara default, aturan ini hanya melihat jenis yang terlihat secara eksternal, tetapi ini dapat dikonfigurasi.
Deskripsi aturan
Konstruktor pada jenis abstrak hanya dapat dipanggil oleh jenis turunan. Karena konstruktor publik membuat instans jenis dan Anda tidak dapat membuat instans jenis abstrak, jenis abstrak yang memiliki konstruktor publik salah dirancang.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, buat konstruktor dilindungi atau tidak menyatakan jenis sebagai abstrak.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini. Jenis abstrak memiliki konstruktor publik.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA1012
// The code that's violating the rule is on this line.
#pragma warning restore CA1012
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1012.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
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
Cuplikan kode berikut berisi jenis abstrak yang melanggar aturan ini.
' Violates this rule
Public MustInherit Class Book
Public Sub New()
End Sub
End Class
// Violates this rule
public abstract class Book
{
public Book()
{
}
}
Cuplikan kode berikut memperbaiki pelanggaran sebelumnya dengan mengubah aksesibilitas konstruktor dari public
ke protected
.
// Does not violate this rule
public abstract class Book
{
protected Book()
{
}
}
' Violates this rule
Public MustInherit Class Book
Protected Sub New()
End Sub
End Class