كيفية القيام بما يلي: تنفيذ رمز التنظيف باستخدام أخيراً ( ارشادات برمجة C# )

الغرض من الجملة finally هي التأكد من حدوث تنظيف الكائنات الضرورية, فالكائنات التي تحمل موارد خارجة عادة ما تظهر مباشرة, حتى لو تم طرح استثناء. أحد الأمثلة على التظيف هي استدعاء Close على FileStream مباشرة بعد الاستخدام بدلاً من انتظار كائن أن ليتم جمعه في المهملات خلال وقت تشغيل اللغة المشتركة، كما يلي:

static void CodeWithoutCleanup()
{
    System.IO.FileStream file = null;
    System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\file.txt");

    file = fileInfo.OpenWrite();
    file.WriteByte(0xF);

    file.Close();
}

مثال

لتحويل التعليمات بالرمجية السابقة إلى جملة try-catch-finally يتم فصل رمز التنظيف من قانون العمل، كما يلي.

static void CodeWithCleanup()
{
    System.IO.FileStream file = null;
    System.IO.FileInfo fileInfo = null;

    try
    {
        fileInfo = new System.IO.FileInfo("C:\\file.txt");

        file = fileInfo.OpenWrite();
        file.WriteByte(0xF);
    }
    catch(System.UnauthorizedAccessException e)
    {
        System.Console.WriteLine(e.Message);
    }
    finally
    {
        if (file != null)
        {
            file.Close();
        }
    }
}

لأن ‏‏الاستثناء يمكن أن يظهر في أي وقت داخل الكتلة try قبل اتصال OpenWrite() , أو اتصال OpenWrite() بنفسها قد يفشل, فلا نضمن أن يكون الملف مفتوحاً عندما نحاول إغلاقه. الكتلة finally ويضيف تحقق للتأكد من أن الكائن FileStream ليس null قبل الاتصال بأسلوب Close. بدون التحقق null فإن الكتلة finally قد تطرح نفسها NullReferenceException، ولكن طرح الاستثناءات في الكتلة finally يجب تجنبه إذا كان ممكناً.

اتصال قاعدة بيانات آخر الترشيح جيد من أجل الإغلاق في الكتلة finally . لأن عدد الاتصالات المسموح به لملقم قاعدة البيانات يكون أحياناً محدود, فيجب إغلاق اتصالات قاعدة البيانات بأقصى سرعة ممكنة. إذا ألقي استثناء قبل إغلاق الاتصال, تعد هذه اهذه حالة أخرى حيث استخدام الكتلة finally أفضل من انتظار تجميع البيانات المهملة.

راجع أيضًا:

المرجع

استثناءات ومعالجة ‏‏ استثناء (البرمجة C# إرشادات)

معالجة الاستثناءات (دليل البرمجة لـ #C)

عبارة using (مرجع #C)

try-catch (مرجع #C)

try-finally (مرجع #C)

try-catch-finally (مرجع #C)

المبادئ

دليل البرمجة لـ #C