کلاس های Exception در سی شارپ
در این بخش کلاس های خطا و استثنای داخلی در زبان برنامه نویسی سی شارپ توضیح داده می شود.
هر برنامه ای در زبان سی شارپ ممکن است در زمان اجرا دچار خطا شود. در این حالت یک Exception توسط سی شارپ ایجاد می شود که نشان دهنده ی خطای مورد نظر و اطلاعاتی در مورد آن است.
Exception
همانطور که گفته شد یک برنامه ممکن است در زمان اجرا با خطا مواجه شود. وقتی خطایی رخ می دهد برنامه یک Exception ایجاد می کند که شامل اطلاعات ضروری در مورد خطایی است که رخ داده است. در دات نت دو نوع Exception وجود دارد :
1- Exception هایی که توسط برنامه اجرایی تولید می شود.
2- Exception هایی که توسط CLR تولید می شوند.
سی شارپ برای هر Exception احتمالی دارای کلاس های درونی است همه کلاس های مربوط به خطا از کلاس Exception مشتق شده اند.
دو نوع کلاس اصلی برای استثناها (exception) وجود دارد : SystemException و ApplicationException
کلاس SystemException به عنوان کلاس پایه برای Exceptionهایی است که توسط CLR تولید می شود و ApplicationException به عنوان کلاس پایه برای استثناهای مرتبط با برنامه اجرایی استفاده می شود.
C#.NET شامل کلاس های استثنای داخلی برای هر خطای احتمالی است. کلاس Exception کلاس پایه همه کلاس های استثنا است.
نمودار سلسله مراتبی کلاس های استثنا در دات نت به شرح زیر است:
در شکل بالا، کلاس Exception ، کلاس پایه کلاس های SystemException و ApplicationException است. کلاس SystemException کلاس پایه برای تمام کلاس های استثنای داخلی در NET Framework. است.
ApplicationException به عنوان کلاس پایه برای همه کلاس های استثنای سفارشی توصیه می شود (اگر نمی توان از کلاس های استثنای سیستم استفاده کرد و برای نقض قوانین تجاری یا سایر خطاهای مربوط به برنامه به کلاس استثنای جدید نیاز دارید، کلاس استثنای سفارشی باید ایجاد شود). این به معنای تمایز بین استثناهای تعریف شده توسط برنامه ها در مقابل استثناهای تعریف شده توسط سیستم بود. با این حال، مایکروسافت اکنون توصیه می کند که کلاس های استثنای سفارشی را به جای کلاس ApplicationException از کلاس Exception استخراج کنید.
شکل زیر نشان می دهد که چگونه NullReferenceException در حالت اشکال زدایی ویژوال استودیو هنگام دسترسی به یک property شی تهی در زمان اجرا ایجاد می شود.
کلاس های استثنایی داخلی
فهرست کلاس های استثنای داخلی مهم در NET. در زیر نشان داده شده است.
1- ArgumentException
هنگامی که یک آرگومان غیر تهی (non-null) که به یک متد ارسال می شود، نامعتبر است، ایجاد می شود.
2- ArgumentNullException
هنگامی که آرگومان تهی به یک متد ارسال می شود، ایجاد می شود.
3- ArgumentOutOfRangeException
زمانی که مقدار یک آرگومان خارج از محدوده مقادیر معتبر باشد ایجاد می شود.
4- DivideByZeroException
هنگامی که یک مقدار صحیح بر صفر تقسیم می شود ایجاد می شود.
5- FileNotFoundException
هنگامی که یک فایل فیزیکی در مکان مشخص شده وجود ندارد، ایجاد می شود.
6- FormatException
زمانی که یک مقدار در فرمت مناسبی برای تبدیل از یک رشته با استفاده از یک متد تبدیل (conversion method) مانند Parse نیست، ایجاد می شود.
7- IndexOutOfRangeException
هنگامی که اندیس آرایه خارج از حد پایین یا بالای یک آرایه یا مجموعه باشد، ایجاد می شود.
8- InvalidOperationException
هنگامی که فراخوانی متد در حالت فعلی یک شی نامعتبر باشد، ایجاد می شود.
9- KeyNotFoundException
هنگامی که کلید مشخص شده برای دسترسی به یک عضو در مجموعه وجود نداشته باشد، ایجاد می شود.
10- NotSupportedException
هنگامی که یک method یا operation پشتیبانی نمی شود، ایجاد می شود.
11- NullReferenceException
هنگامی که برنامه به اعضای شی تهی دسترسی دارد ایجاد می شود.
12- OverflowException
هنگامی که یک عملیات حسابی، casting یا تبدیل منجر به overflow می شود، ایجاد می شود.
13- OutOfMemoryException
زمانی که برنامه حافظه کافی برای اجرای کد دریافت نمی کند ایجاد می شود.
14- StackOverflowException
هنگامی که پشته ای در حافظه سرریز می شود، ایجاد می شود.
15- TimeoutException
time interval اختصاص داده شده به یک عملیات به پایان رسیده است.
وقتی خطایی رخ می دهد، کد برنامه یا کنترل کننده پیش فرض این استثنا را کنترل می کند. در بخش بعدی نحوه کنترل استثنا و خطا آموزش داده می شود.