تعریف یک استثناء توسط کاربر

در سی شارپ می‌توان یک استثناء سفارشی ایجاد کرد. استثناء سفارشی استثنایی است که توسط کاربر تعریف می‌شود و باید از کلاس پایه Exception ارث بری کند. برای این کار یک کلاس جداگانه که از کلاس پایه Exception ارث می‌برد ایجاد می‌کنیم. یک برنامه کنسول ایجاد کنید و نام آن را UserDefinedExceptions بگذارید.
بعد از ایجاد پروژه بر روی دکمه Add New Item (مسیر Project>Add New Item) در نوار ابزار (toolbar) کلیک کنید و از پنجره باز شده گزینه Class را انتخاب کنید.
نام کلاس را NegativeNumberException بگذارید.

   1: using System;
   2: 
   3: namespace UserDefinedExceptions
   4: {
   5:     class NegativeNumberException : Exception
   6:     {
   7:         public NegativeNumberException()
   8:             : base("The operation will result to a negative number.")
   9:         {
  10:         }
  11: 
  12:         public NegativeNumberException(string message)
  13:             : base(message)
  14:         {
  15:         }
  16:
  17:         public NegativeNumberException(string message, Exception inner)
  18:             : base(message, inner)
  19:         {
  20:         }
  21:     }
  22: }

در خط 5 مشاهده می‌کنید کلاس ایجاد شده توسط ما از کلاس Exception ارث بری کرده است. به عنوان یک قرارداد باید به آخر نام کلاس‌های استثنایی که توسط کاربر تعریف می‌شوند کلمه Exception اضافه شده و 3 سازنده برای آنها تعریف شود.
اولین سازنده بدون پارامتر می‌باشد.
دومین سازنده یک آرگومان از نوع رشته برای نمایش پیغام خطا قبول می‌کند.
سومین سازنده که دو آرگومان قبول می‌کند، یکی پیغام خطا را نمایش داده و یکی بخش inner است آن برای نشان دادن علت وقوع استثناء می‌باشد. حال می‌خواهیم یک کلاس استثناء خیلی سفارشی ایجاد کنیم. در فایل Program.cs کد زیر را وارد کنید :

   1: using System;
   2: 
   3: class Program
   4: {
   5:     public static void Main()
   6:     {
   7:         int firstNumber, secondNumber, difference;
   8: 
   9:         Console.Write("Enter the first number: ");
  10:         firstNumber = Int32.Parse(Console.ReadLine());
  11: 
  12:         Console.Write("Enter the second number: ");
  13:         secondNumber = Int32.Parse(Console.ReadLine());
  14: 
  15:         difference = firstNumber - secondNumber;
  16: 
  17:         try
  18:         {
  19:             if (difference < 0)
  20:             {
  21:                 throw new NegativeNumberException();
  22:             }
  23:         }
  24:         catch (NegativeNumberException error)
  25:         {
  26:             Console.WriteLine(error.Message);
  27:         }
  28:     }
  29: }
Enter the first number: 10
Enter the second number: 11
The operation will result to a negative number.

از آنجاییکه تولید یک عدد منفی در هیچ برنامه‌ای یک استثناء محسوب نمی‌شود، ما به صورت دستی و برای خودمان یک استثناء ایجاد کرده‌ایم. ابتدا از کاربر می‌خواهیم که دو مقدار را وارد کند (خطوط 13-9). سپس تفاوت دو عدد را محاسبه می‌کنیم (خط 15). در داخل بلوک try تست می‌کنیم که آیا حاصل تفریق دو عدد، یک عدد منفی است (خط 19). اگر یک عدد منفی بود سپس یک نمونه از کلاس NegativeNumberException ایجاد می‌کنیم (خط 21). بعد از ایجاد نمونه به وسیله بلوک catch و برای نشان داده پیغام خطا آن را اداره می‌کنیم (خطوط 26-24).