ca1821: قم بإزالة finalizers فارغ

TypeName

RemoveEmptyFinalizers

CheckId

ca1821

Category

Microsoft.الأداء

تعطيل تغيير

غير فاصلة

السبب

يطبق نوعا أداة الإنهاء التي هو فارغة، قم باستدعاء أداة الإنهاء النوع الأساسي فقط، أو قم باستدعاء فقط الشرطي صدور الوظائف.

وصف القاعدة

عندما يمكنك، تجنب finalizers نظراً للأداء الإضافى المضمنة في تعقب مقدار الحمل كائن العمر. تشغيل حاوي المهملات أداة الإنهاء قبل تجميع كائن. وهذا يعني أنه سيتم بين مجموعات مطلوب تجميع الكائن. إلى أداة الإنهاء فارغ حدوث ذلك تمت الإضافة أحمال دون أية فائدة.

كيف إلى الإصلاح انتهاكات

قم بإزالة أداة الإنهاء فارغ. في حالة طلب لتصحيح الأخطاء أداة الإنهاء، إحاطة أداة الإنهاء كامل #if DEBUG / #endifتوجيهات.

عند إلى منع التحذيرات

عدم القيام بمنع رسالة من هذه قاعدة. فشل في منع الإنهاء ينخفض الأداء ويوفر مزايا لا.

مثال

يظهر المثال التالي أداة الإنهاء فارغ يجب تمت إزالته، أداة الإنهاء التي يجب أن تتم إحاطتها ب #if DEBUG / #endifتوجيهات و أداة الإنهاء يستخدم #if DEBUG / #endifتوجيهات بشكل صحيح.

using System.Diagnostics;

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
}