Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1821 |
| Başlık | Boş sonlandırıcıları kaldırın |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
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 çağrılan yöntemleri çağırır.
Kural açıklaması
Nesne ömrünü izlemeyle ilgili performans ek yükü nedeniyle, mümkün olduğunca sonlandırıcıları kullanmaktan kaçının. Çö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ı, herhangi bir fayda sağlamaksızın ek bir yük oluşturur.
İhlalleri düzeltme
Boş sonlandırıcıyı kaldırın. Hata ayıklama için bir sonlandırıcı gerekiyorsa, sonlandırıcının tamamını #if DEBUG / #endif talimatları içine alın.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan gelen bir mesajı bastırmayın.
Ö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
}