CA2015: Jangan tentukan finalizer untuk jenis yang berasal dari MemoryManager<T>

Properti Nilai
ID Aturan CA2015
Judul Jangan tentukan finalizer untuk jenis yang berasal dari MemoryManager<T>
Kategori Keandalan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai peringatan
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Menentukan finalizer untuk jenis yang berasal dari MemoryManager<T>

Deskripsi aturan

Menambahkan finalizer ke jenis yang berasal dari MemoryManager<T> kemungkinan merupakan indikasi bug, karena menunjukkan bahwa sumber daya asli yang mungkin telah digunakan dalam Span<T> sedang dibersihkan dan berpotensi masih digunakan oleh Span<T>.

Catatan

Kelas MemoryManager<T> ini ditujukan untuk skenario lanjutan. Sebagian besar pengembang tidak perlu menggunakannya.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, hapus definisi finalizer.

class DerivedClass <T> : MemoryManager<T>
{
    public override bool Dispose(bool disposing)
    {
        if (disposing)
        {
            _handle.Dispose();
        }
    }

    ...

    // Violation occurs, remove the finalizer to fix the warning.
    ~DerivedClass() => Dispose(false);
}

Kapan harus menekan peringatan

Aman untuk menekan pelanggaran aturan ini jika niatnya adalah membuat finalizer untuk tujuan penelusuran kesalahan atau validasi.

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

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

[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none

Untuk menonaktifkan seluruh kategori aturan ini, atur tingkat keparahan untuk kategori ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Lihat juga