الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Error Handling in c#

مغلق
بدأه محمد الهباش في 8 فبراير 2005 · 0 رد · 828 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

الرجاء التثبيت

تعتبر لغات البرمجة الحديثة من اغنى اللغات المتوافر فيها شتى انواع التركيبات البرمجية التي تساعد المبرمج على ان يكون برنامجه بغاية الروعة

ومن هذه اللغات الموجودة لدين هي الجافا وايضا السي شارب وسوف نتحدث اليوم عن شيء مهم جدا لم يكن موجودا في لغات البرمجة الا وهو ال

error handling وهذه المكانيكية تتيح للمبرمج حتى الإبتعاد عن الأخطاء التي تحدث في اوقات التنفيذ اي التشغيل وكما كلنا

نعلم فإن لغات البرمجة السابقة كانت فقط تتحمل مسؤولية الأخطاء التي تحدث اثناء تحميل البرنامج اي في حالة تحويله الى لغة آله اي في حالة

ان يتم عمل ترجمة لهذا البرنامج لكن السي شارب والجافا تقدمان لنا امكانية ان نعمل على عملية تجاهل الخطأ في البرنامج بالمناسبة هذه المكانيكية

موجودة منذ زمن بعيد في اللينوكس حيث ان اللينوكس في حالة وجود dead lock يعمل تجاهل كامل للخطأ اي ان الليونوكس قد طور

هذه الأمكانية لأبعد الحدود لدرجة عمل التجاهل ولكن نظم التشغيل ويندوز لا يستطيع سوى ان يعمل على عدة خوارزميات تعمل على ان تمنع حدوث الdead lock

ارجو ان تكونوا تعلموا ما هو ال dead lock اذا لم تكونو تعلمو سوف اشرح لكم بالتفصيل فقط اذكرو لي في نهاية المقاله لنعد الى الى موضوعنا ...

وهي حالة مشابهه للأخطاء التي سبق ان تحدثنا عنها الا وهي الأخطاء التي تحدثت عنها في السابق وكثيرا ما تستعمل ال error handling

في عمليات قواعد البيانات وفي عمليات القسمة على صفر وعمليات خروج الحد المعين للمصفوفة عن الحد الموضوع لها وهذه من الأخطاء الشائعة التي جميعا من نقع فيها

وتتكون الerror handling في كلا

اللغتين من ثلاث اجزاء الا وهي

try{

هنا يتم عادة وضع الجمل التي يتم تنفيذها والتي يتوقع حصول خطأ فيها

}

اذا اردت ان تعرف الخطأ الذي يحدث لديك في البرنامج فما عليك الا ان تجعل عذا الخطأ يحدث وبكل سهولة عندما تظهر لك شاشة الخطأ ان تحفظ اسم الخطأ وتضعه في اقواس الجزء catch ()

catch (هنا بالعادة يتم وضع الخطأ المتوقع حصلوه في الجمل التي وضعت في جملة try )

{

هنا يتم وضع الجملة التي تريد اظهارها للمستخدم اقصد الرسالة

}

اما الجزي الأخير من الerror handling فهو اختيار خياري الا وهو finally

وفي حالة حدوث الخطأ فإن الدالة clr تستدعي او تعمل رمي الل exception واذا حدث خطأ في جملة الtry فإن هذه الجملة بعد حدوث الخطأ فإنها سوف تتلاشي او انها

سوف تصبح عديمة الفائدة .

وايضا اذا كان هناك فقط catch فإن الfinally هي اختيار خياري وليس اجباري ام اذا لم يكن هناك اي catch فإن الfinally هي اختيار اجباري وايضا هناك وظيفة اساسية

لل finally الا وهي انه عندما لا يتم التقاط الخطأ بواسطة جمملة catch فإن الfinally تلقتط الخطأ مباشربة بعد وجود الcatch وهناك جملة يجب ان ننوه لهه

انه في حالة وجود catch يجب على الfinally ان تكون بعد اخر جملة catch حتى لا تسبب اي اخطاء وبالمناسبة فإن جلة error handling الموجودة في كلا

لغتي البرمجة الجافا والسي شارب تساعد مبرمجي المترجمات على سهولة عمل مترجماتهم بسرعة قصوى وسهوله وسلاسة تامة .

وهناك خاصيتيين لل error handling متعلقاتبالرسالة التي تظهر لنا في حالة وجود الخطأ الا وهما Message StackTrace

ألخاصية message تخزن رسالة الخطأ الخاصة بالException في حالة حدوثه اما الخاصية stackTrace فهي تختص بالتالي انها تحتوي على الالنص الذي يمثل الmethod

التي استدعت الstack وايضا يمثل الmethods التي لم يتم تنفيذها بالكامل في حالة حدوث الخطأ

وهناك ايضا خاصية اخري في ال error handling الا وهي في حالة انه لم تعجبك الرسالة التي يخرجها لك الerror handling فإنك بكل سهولة تستطيع ان

تغير ماهية الرسالة وايضا تغير اسم الException handlling اي انك تصنع Exception handlling بإسم جديد ورسالة خطأ جديدة

ويسمى هذا النوع الجديد inner Exception وهو ايضا يسمى في البرنامج throught new Exception وهذا مثال على ذلك حيث انك تريد تحويل من

نص ليس برقم الى رقم وتريد اظهار رسالة خطأ جديدة وبالتالي تقوم بفعل التالي انه يقوم بعمل catch للخطأ ومن ثم يقوم بعمل Exception Object يمرر الException

الموجود اصلا في احدى مدخلات الconstructor الexception Object العادية تصيح new innerException من الException

Object الموجودة اصلا .

بهذا المثال سوف نستوضح ما قلناه سابقا لربما انه استصعب عليكم ما قلناه فهذا المثال يوضح بشكل تفضل .

using System;

// demonstrates using the Message, StackTrace and

// InnerException properties

class Properties

{

static void Main( string[] args )

{

// call Method1, any Exception it generates will be

// caught in the catch handler that follows

try

{

Method1();

}

// Output string representation of Exception, then

// output values of InnerException, Message,

// and StackTrace properties

catch ( Exception exception )

{

Console.WriteLine(

"exception.ToString(): \n{0}\n",

exception.ToString() );

Console.WriteLine( "exception.Message: \n{0}\n",

exception.Message );

Console.WriteLine( "exception.StackTrace: \n{0}\n",

exception.StackTrace );

Console.WriteLine(

"exception.InnerException: \n{0}",

exception.InnerException );

} // end catch

40 } // end Main

41

42 // calls Method2

public static void Method1()

{

Method2();

}

// calls Method3

public static void Method2()

{

Method3();

}

// throws an Exception containing an InnerException

public static void Method3()

{

// attempt to convert non-integer string to int

try

{

Convert.ToInt32( "Not an integer" );

}

// catch FormatException and wrap it in new Exception

catch ( FormatException error )

{

throw new Exception(

"Exception occurred in Method3", error );

}

} // end method Method3

}

ما حدث في اخر catch في البرنامج يوضح لنا كي تمت سلسلة الأمور في البرنامج حيث قال throw new Exceptionاي انه قصد ان يعمل exception جديد انظر للبرنامج بعناية

سوف ترى ان هذه الmethod قد تم استدعائها الى الmethod الأولى ومن ثم استدعيت للمثود الرئيسية لاحظ انه ما تم تمريره الى constuctor هو throw new Exception

هذا هو الconstructor .

هذا بالنسبة للجزىء الأول من المقالة اما الجزي الأخر فإنه يتحدث عن

Programmer-Defined Exception Classes

الجزيئات الحاملة للخطأ المبرمجة سابقا لا اعلم اذا كانت الترجمة صحيحة 100%

وهو يتحدث عن انك بنفسك انت تنشيء exception ألخاصة بك لا تكون موجودة في السي شارب دوت نت

اي انك انت المبرمج تنشيء هذه ال Exceptions بنفسك وتضيفها الى الدوت نت .

وهذا مثال بسط عللى كيفية انشاء ال Exceptions

using System;

// NegativeNumberException represents exceptions caused by

// illegal operations performed on negative numbers

class NegativeNumberException : ApplicationException

{

// default constructor

public NegativeNumberException()

: base( "Illegal operation for a negative number" )

{

}

// constructor for customizing error message

public NegativeNumberException( string message )

: base( message )

{

}

// constructor for customizing error message and

// specifying inner exception object

public NegativeNumberException(

string message, Exception inner )

: base( message, inner )

{

}

}

وهناك عدة شروط يجب وضعها حتى تستطيع انشاء الexception اولها

1 هو ان يكون اسم الكلاس منتهى ب Exception

2تعريف ثلاث constructors

الأول يستقبل رسالة الخطأ

الثاني يستقبل String argument

3الثالث يستقبل Exception argument

وفي الحلقة القادمة سوف انشر بإذن الله حتى استجمع معلوماتي باقي المقاله وسوف ادمج معها الأمثلة التي ذكرتها في المقالة في ملف نصي .

نموت وتحيا ...................فلسطين .

هذا الموضوع مغلق.

مواضيع مشابهة