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 8'de 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.
Dekont
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.