CA1812: Hindari kelas internal yang tidak diinstansiasi

Properti Nilai
ID Aturan CA1812
Judul Hindari kelas internal yang tidak diinstansiasi
Kategori Performa
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Jenis internal (tingkat perakitan) tidak pernah dibuat instansnya.

Deskripsi aturan

Aturan ini mencoba menemukan panggilan ke salah satu konstruktor dari tipe tersebut dan melaporkan pelanggaran jika tidak ada panggilan yang ditemukan.

Jenis berikut ini tidak diperiksa oleh aturan ini:

  • Jenis nilai
  • Jenis abstrak
  • Enumerasi
  • Delegasi
  • Jenis array yang dihasilkan oleh pengompilasi
  • Jenis yang tidak dapat diinstansiasi dan hanya menentukan static metode.

Jika Anda menerapkan System.Runtime.CompilerServices.InternalsVisibleToAttribute ke rakitan yang sedang dianalisis, aturan ini tidak menandai jenis yang ditandai sebagai internal (Friend di Visual Basic) secara default, karena bidang dapat digunakan oleh rakitan teman. Untuk tetap menganalisis assembly, lihat Mengonfigurasi kode untuk menganalisis.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, hapus jenis atau tambahkan kode yang menggunakannya. Jika tipe hanya berisi metode static, tambahkan pengubah static ke tipe untuk mencegah pengkompilasi menghasilkan konstruktor instans publik default.

Kapan harus menekan peringatan

Aman untuk menyembunyikan peringatan dari aturan ini. Sebaiknya Anda menyembunyikan peringatan ini dalam situasi berikut:

  • Kelas dibuat melalui metode refleksi late-bound seperti System.Activator.CreateInstance.

  • Kelas terdaftar dalam kontainer inversion of control (IoC) sebagai bagian dari pola injeksi dependensi.

  • Kelas dibuat secara otomatis oleh runtime atau ASP.NET. Beberapa contoh kelas yang dibuat secara otomatis adalah kelas yang mengimplementasikan System.Configuration.IConfigurationSectionHandler atau System.Web.IHttpHandler.

  • Kelas digunakan sebagai parameter jenis dalam definisi kelas dan memiliki new batasan. Contoh berikut akan ditandai oleh aturan CA1812:

    internal class MyClass
    {
        public void DoSomething()
        {
        }
    }
    public class MyGeneric<T> where T : new()
    {
        public T Create()
        {
            return new T();
        }
    }
    
    MyGeneric<MyClass> mc = new MyGeneric<MyClass>();
    mc.Create();
    

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 CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA1812.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 (Performa) yang diterapkannya. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.

Abaikan atribut InternalsVisibleTo

Secara bawaan, aturan ini dinonaktifkan jika rakitan yang dianalisis menggunakan InternalsVisibleToAttribute untuk mengekspos simbol internalnya. Anda dapat mengatur opsi ignore_internalsvisibleto untuk mengubah konfigurasi. Untuk menentukan bahwa aturan harus berjalan meskipun rakitan ditandai dengan InternalsVisibleToAttribute, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:

dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true

Nota

Ganti bagian XXXXCAXXXX dengan ID aturan yang berlaku.

Opsi ini tersedia mulai dari .NET 8.