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

Ö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
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Uyarı olarak
Geçerli diller C# ve Visual Basic

Neden

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

Kural açıklaması

MemoryManager<T> türünden türetilmiş bir türe sonlandırıcı eklemek, bir Span<T> içinde teslim edilmiş olabilecek yerel bir kaynağın, Span<T> tarafından hala kullanımdayken temizlenme riskini işaret ettiğinden büyük olasılıkla bir hatanın 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 noneolarak ayarlayın.

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

Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini noneyapı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.