كتلة Finally
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 27 من 66.
تحتوي كتلة finally على كود يتم تنفيذه دائمًا، سواء حدث استثناء أم لا، حتى لو كان هناك بيان return في كتلتي try أو catch.
أنشئ بنية try-catch-finally أساسية:
try
{
// الكود الذي قد يطرح استثناءً
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// الكود الذي يعالج الاستثناء
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// الكود الذي يتم تنفيذه دائماً
Console.WriteLine("This always executes");
}
تُعد كتلة finally مفيدة لمهام التنظيف مثل إغلاق الملفات أو اتصالات قاعدة البيانات:
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// قم دائمًا بإغلاق الملف، حتى في حالة حدوث استثناء
if (file != null)
{
file.Close();
}
}
التحدي
سهلقم بإنشاء طريقة (method) تسمى ProcessData تقوم بما يلي:
- تأخذ معاملًا نصيًا (string parameter) يمثل اسم الملف
- تحاول فتح الملف وقراءة محتوياته
- تكتب المحتويات في وحدة التحكم (console)
- تقوم بتنظيف الموارد بشكل صحيح باستخدام كتلة finally
- تتعامل مع FileNotFoundException و IOException
إذا تعذر العثور على الملف، قم بطباعة: "ERROR: File not found: [filename]"
إذا حدث خطأ IO آخر، قم بطباعة: "ERROR: Could not read the file: [error message]"
قم دائمًا بطباعة "File operation completed." في كتلة finally، سواء حدث استثناء أم لا.
ورقة مرجعية
تحتوي كتلة finally على كود يتم تنفيذه دائمًا، سواء حدث استثناء أم لا، حتى لو كانت هناك جملة return في كتلتي try أو catch.
هيكل try-catch-finally الأساسي:
try
{
// كود قد يتسبب في حدوث استثناء
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// كود يعالج الاستثناء
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// كود يتم تنفيذه دائمًا
Console.WriteLine("This always executes");
}
تعتبر كتلة finally مفيدة لمهام التنظيف مثل إغلاق الملفات أو اتصالات قواعد البيانات:
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// إغلاق الملف دائمًا، حتى في حالة حدوث استثناء
if (file != null)
{
file.Close();
}
}
جرّب بنفسك
using System;
using System.IO;
class Program
{
public static void ProcessData(string filename)
{
// اكتب الكود الخاص بك هنا
}
static void Main(string[] args)
{
string filename = Console.ReadLine();
ProcessData(filename);
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Null