Aracılığıyla paylaş


CA2015: MemoryManager<T'den türetilen türler için sonlandırıcı tanımlama>

Özellik Değer
Kural Kimliği CA2015
Başlık MemoryManager<T'den türetilen türler için sonlandırıcıları tanımlama>
Kategori Güvenilirlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 9'da varsayılan olarak etkin Uyarı olarak

Neden

Türetilen türler için sonlandırıcıları tanımlama MemoryManager<T>

Kural açıklaması

türünden MemoryManager<T> türetilmiş bir türe sonlandırıcı eklemek, içinde dağıtılmış olabilecek yerel bir kaynağın temizlendiğini ve hala tarafından kullanımda olduğu sırada temizlenebileceğini önerdiğinden büyük olasılıkla bir Span<T> hatanın Span<T>göstergesidir.

Not

MemoryManager<T> sınıfı gelişmiş senaryolar için tasarlanmıştır. Çoğu geliştiricinin bunu kullanması gerekmez.

İhlalleri düzeltme

İhlali düzeltmek için sonlandırıcı tanımını kaldırın.

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);
}

Uyarıların ne zaman bastırılması gerekiyor?

Amaç hata ayıklama veya doğrulama amacıyla bir sonlandırıcı oluşturmaksa, bu kuralın ihlalini engellemek güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none olarak ayarlayın.

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

Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini none yapılandırma dosyasında olarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.