أساسيات البرمجة سي شارب معالجة الاستثناءات C# - Exception Handling
معالجة الاستثناءات C# - Exception Handling
الأسثناء Exception :-
الإستثناء هو خطأ يظهر أثناء تشغيل البرنامج سواء كان خطأ مفتعل أو نتيجة سهو المبرمج عن وضع قيود محدد للتعامل مع البرنامج مثلا حقل نص يستخدم لادخال الارقام وسها المبرمج عن وضع قيد يجبر المستخدم على ادخال ارقام بدل نصوص.او مثل القسم على صفر.
يقسم معالجة الاستثناءات الى اربع اقسام.
- try وفي هذا البلوك يتم وضع الكود الذي يجب معالجة استثناء له عند حدوث الاخطاء ويجب ان يتبعه اما واحد من catch او عدة جمل Catch.
- catch وهي تشير الى وقوع الخطأ وتم العثور عليه وهنا يتم معالجة الخطأ عند حدوثه.
- finally وتستخدم سواء حدثجب الخطأ او لم يحدث سوف يتم تنفيذ الكود الذي تحتويه مثل إغلاق ملف. نفترض اننا قمنا بفتح قاعدة بيانات او ملف وحدث خطأ فهنا يجب إغلاق الملف سواء حدث الخطأ أو لم يحدث.
- throw وهي تقوم برمي الاخطأ اي بمعنى تجاهل الخطأ والانتقال الى الكود التالي لتنفيذه وغالبا ما يستخدم من قبل المبرمجين المبتدائين وذوي قلة الخبرة ولكن لا يمنع ذوي الاحتراف استخدامه خاصة لكتابة الاخطأ في ملف log.
الصيغة العامة لمعالجة الإستثناءات.
try { //الكود الذي قد ينتج عنه خطأ } catch( ExceptionName e1 ) { // الاسثناء الاول } catch( ExceptionName e2 ) { // الاسثناء الثاني } catch( ExceptionName eN ) { // الاسثناء الثالث } finally { // الجملة التالية ستنفذ سواء حدث خطأ أو لم يحدث }
فئة معالجة الاستثناءات
1- System.ApplicationException
هذا الفئة هي التي يمكن للمبرمجين اشتقاقها لتعريف استثناءات خاصة بهم او ببرامجهم.
2- System.SystemException
اسم فئة الاستثناء | الوصف |
---|---|
System.IO.IOException | معالجة اسثناءات الادخال والاخراج مثل اخطاء فتح ملف او الكتابة في ملف |
System.IndexOutOfRangeException | اسثناء معالجة الفهرس الذي خارج المدى في المصفوفات. |
System.ArrayTypeMismatchException | استثناء معالجة عند حدوث خطأ في نوع المصفوفة مثل دمج مصفوفتين ليست من نفس نوع البيانات |
System.NullReferenceException | استثناء عندما لا يوجد مرجع للكائن او انها يشير لقيمة فارغة |
System.DivideByZeroException | استثناء القسمة على صفر |
System.InvalidCastException | استثناء عند التحويل من نوع بيانات الى اخر . |
System.OutOfMemoryException | استثناء عندما لا توجد مكان في الذاكرة. |
System.StackOverflowException | اسثناء يحدث عندما يصبح مدى المكدس لا يتسع قيم. |
مثال على معالجة الاستثناءات:-
في المثال التالي نعالج خطأ القسمة على صفر.using System; namespace ErrorHandlingApplication { class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) { Console.WriteLine("Exception caught: {0}", e); } finally { Console.WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } }
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
تعريف استثناء من قبل المستخدم.
عند تعريف استثناء من قبل المبرمج فيجب وراثة الفئة ApplicationException كما ذكرنا سابقا.
using System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } } public class TempIsZeroException: ApplicationException { public TempIsZeroException(string message): base(message) { } } public class Temperature { int temperature = 0; public void showTemp() { if(temperature == 0) { throw (new TempIsZeroException("Zero Temperature found")); } else { Console.WriteLine("Temperature: {0}", temperature); } } }
تحميل الكود السابق:- ملاحظة الانتظار 5 ثواني وسيتم تحويلك لصفحة التحميل وشكرا
ناتج الكود:-
TempIsZeroException: Zero Temperature found
كائن throw الصيغة العامة لالقاء اسثتناء.
Catch(Exception e) { ... Throw e }
Ahmed Ata Almahallawi
Freelancer
IT
IT Help Desk,
SEO experience,PHP,C#,ASPX
SEO experience,PHP,C#,ASPX
Al alami st
gaza -jabalia, Gaza Strip
Palestine
ahmed.almahallawi@gmail.com
DOB: 05/10/1984
by +Ahmed Almahallawi
by +Ahmed Almahallawi
18/12/2013
التسميات: csharp-basic
<< الصفحة الرئيسية