Bagikan melalui


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 8 Tidak

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 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

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