Latest web development tutorials

C معالجة # استثناء

شذوذ خلال مشاكل تنفيذ البرنامج. C # هو استثناء في استجابة للظروف الاستثنائية التي تنشأ عند تشغيل البرنامج، مثل محاولة القسمة على صفر.

يتم توفير استثناء يتم نقل عنصر تحكم البرنامج من جزء إلى جزء آخر من الطريق. C معالجة # استثناء على أساس الكلمات الرئيسية الأربعةأعلاه:حاول، الصيد، وأخيراورمي.

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

قواعد

لنفترض أن كتلة غير طبيعية، وطريقة استخدام الكلمات الرئيسية ومحاولة اللحاق استثناء. كود محاولة / كتلة التقاط محمي كود، استخدام حاول / catch كما هو موضح في بناء الجملة التالي:

محاولة
{
   } // بيان الذي تسبب في الاستثناء
الصيد (E1 ExceptionName)
{
   // خطأ معالجة التعليمات البرمجية}
الصيد (E2 ExceptionName)
{
   // خطأ معالجة التعليمات البرمجية}
الصيد (ExceptionName EN)
{
   // خطأ معالجة التعليمات البرمجية}
أخيرا
{
   // البيانات على تنفيذ}

يمكنك سرد عبارات التقاط عدة لصيد أنواع مختلفة من الاستثناءات، لمنع كتلة المحاولة يولد استثناءات متعددة في ظل ظروف مختلفة.

دروس استثناء في C #

C # الاستثناء هو استخدام تمثيل الطبقة. دروس استثناء في C # مستمدة في معظمها بشكل مباشر أو غير مباشر من الدرجةSystem.Exception.ويستمدSystem.ApplicationException وSystem.SystemExceptionالطبقة استثناء الطبقة الطبقات System.Exception.

دعم فئةSystem.ApplicationException الناتجة عن استثناء تطبيق.لذلك ينبغي أن تستمد الاستثناءات المعرفة من قبل مبرمج من هذه الفئة.

الطبقةSystem.SystemException هو كل مسبقا الفئة الأساسية نظام للاستثناءات.

الجدول التالي يسرد تستمد بعض من فصول استثناء مسبقا الطبقة Sytem.SystemException:

异常类描述
System.IO.IOException处理 I/O 错误。
System.IndexOutOfRangeException处理当方法指向超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException处理当数组类型不匹配时生成的错误。
System.NullReferenceException处理当依从一个空对象时生成的错误。
System.DivideByZeroException处理当除以零时生成的错误。
System.InvalidCastException处理在类型转换期间生成的错误。
System.OutOfMemoryException处理空闲内存不足生成的错误。
System.StackOverflowException处理栈溢出生成的错误。

معالجة استثناء

C # لمحاولة وقدمت كتلة الصيد في شكل برنامج معالجة الاستثناء منظم. باستخدام هذه الكتل، البيانات البرنامج الأساسي والبيانات معالجة الخطأ فصل.

التعامل مع هذه الكتل الخطأ هو استخدامالمحاولة، الصيدوكلمات رئيسية لتحقيقأخيرا.هنا هو استثناء عندما القيت مقسوما صفر الأمثلة على ذلك:

باستخدام نظام.
مساحة ErrorHandlingApplication
{
    DivNumbers الطبقة
    {
        الباحث نتيجة.
        DivNumbers ()
        {
            النتيجة = 0؛
        }
        تقسيم الفراغ العام (الباحث NUM1، الباحث NUM2)
        {
            محاولة
            {
                النتيجة = NUM1 / NUM2.
            }
            الصيد (DivideByZeroException ه)
            {
                Console.WriteLine ( "استثناء اشتعلت: {0}"، ه)؛
            }
            أخيرا
            {
                Console.WriteLine ( "النتيجة: {0}"، نتيجة)؛
            }

        }
        ساكنة باطلة الرئيسية (سلسلة [] وسائط)
        {
            DivNumbers د = DivNumbers الجديدة ()؛
            d.division (25، 0)؛
            Console.ReadKey ()؛
        }
    }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

استثناء اشتعلت: System.DivideByZeroException: حاول القسمة على صفر. 
في ...
النتيجة: 0

إنشاء استثناء المعرفة

يمكنك أيضا تحديد الاستثناءات الخاصة بك. مشتق من الدرجة استثناء المعرفة من الدرجةApplicationException.يوضح المثال التالي هذه النقطة:

باستخدام نظام.
مساحة UserDefinedException
{
   الطبقة TestTemperature
   {
      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         درجة الحرارة درجة الحرارة = درجة الحرارة الجديدة ()؛
         محاولة
         {
            temp.showTemp ()؛
         }
         الصيد (TempIsZeroException ه)
         {
            Console.WriteLine ( "TempIsZeroException: {0}"، e.Message)؛
         }
         Console.ReadKey ()؛
      }
   }
}
TempIsZeroException الطبقة الجمهور: ApplicationException
{
   TempIsZeroException الجمهور (رسالة سلسلة): قاعدة (الرسالة)
   {
   }
}
فئة العمومي درجة الحرارة
{
   درجة الحرارة كثافة العمليات = 0؛
   showTemp الفراغ الجمهور ()
   {
      إذا (درجة الحرارة == 0)
      {
         رمي (TempIsZeroException الجديدة ( "صفر درجة الحرارة وجدت"))؛
      }
      آخر
      {
         Console.WriteLine ( "درجة الحرارة: {0}"، ودرجة الحرارة)؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

TempIsZeroException: وجدت صفر درجة الحرارة

قابل للظهور

إذا نشأ باستثناء مباشرة أو بشكل غير مباشر من الطبقةSystem.Exception، يمكنك رمي كائن.يمكنك استخدام عبارة التقاط كتلة رمي رمي الكائن الحالي على النحو التالي:

الصيد (استثناء ه)
{
   ...
   البريد رمي
}