CA1821: Boş sonlandırıcıları kaldırın
Özellik | Değer |
---|---|
Kural Kimliği | CA1821 |
Başlık | Boş sonlandırıcıları kaldırın |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
Neden
Bir tür boş bir sonlandırıcı uygular, yalnızca temel tür sonlandırıcısını çağırır veya yalnızca koşullu olarak yayılan yöntemleri çağırır.
Kural açıklaması
Mümkün olduğunca, nesne ömrünü izlemeyle ilgili ek performans ek yükü nedeniyle sonlandırıcıları önleyin. Çöp toplayıcı, nesneyi toplamadan önce sonlandırıcıyı çalıştırır. Bu, nesneyi toplamak için en az iki koleksiyon gerektiği anlamına gelir. Boş bir sonlandırıcı, bu ek yükü herhangi bir avantaj olmadan doğurabilir.
İhlalleri düzeltme
Boş sonlandırıcıyı kaldırın. Hata ayıklama için sonlandırıcı gerekiyorsa, sonlandırıcının tamamını yönergelere dahil #if DEBUG / #endif
edin.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan bir iletiyi gizlemeyin.
Örnek
Aşağıdaki örnekte kaldırılması gereken boş bir sonlandırıcı, yönergeler içine #if DEBUG / #endif
alınması gereken bir sonlandırıcı ve yönergeleri doğru kullanan #if DEBUG / #endif
bir sonlandırıcı gösterilmektedir.
public class Class1
{
// Violation occurs because the finalizer is empty.
~Class1()
{
}
}
public class Class2
{
// Violation occurs because Debug.Fail is a conditional method.
// The finalizer will contain code only if the DEBUG directive
// symbol is present at compile time. When the DEBUG
// directive is not present, the finalizer will still exist, but
// it will be empty.
~Class2()
{
Debug.Fail("Finalizer called!");
}
}
public class Class3
{
#if DEBUG
// Violation will not occur because the finalizer will exist and
// contain code when the DEBUG directive is present. When the
// DEBUG directive is not present, the finalizer will not exist,
// and therefore not be empty.
~Class3()
{
Debug.Fail("Finalizer called!");
}
#endif
}