کلمه کلیدی throw در سی شارپ
در بخش قبلی نحوه کنترل و رسیدگی به استثناهایی را که به طور خودکار توسط CLR ایجاد می شوند، دیدیم. در این بخش، نحوه ایجاد یک استثنا را به صورت دستی (manually) خواهیم دید.
یک استثنا را می توان به صورت دستی با استفاده از کلمه کلیدی throw ایجاد کرد. هر نوع استثنایی که از کلاس Exception مشتق شده باشد می تواند با استفاده از کلمه کلیدی throw رخ دهد.
خروجی قطعه کد بالا عبارت است از:
در مثال بالا، اگر شی Student برابر با null باشد، متد ()PrintStudentName باعث رخداد استثنای NullReferenceException می شود.
توجه داشته باشید که throw با استفاده از کلمه کلیدی new یک شی از هر نوع استثنای معتبری ایجاد می کند. کلمه کلیدی throw را نمی توان با هر نوع دیگری که از کلاس Exception مشتق نشده است استفاده کرد.
Re-throwing an Exception
همچنین می توانید یک استثنا را از بلوک catch دوباره throw کنید تا به فراخوانی کننده منتقل شود و به فراخوانی کننده اجازه دهید آن طور که می خواهد آن را مدیریت کند. مثال زیر یک استثنا را re-throw می کند.
خروجی قطعه کد بالا عبارت است از:
در مثال بالا، یک استثنا در ()Method2 رخ می دهد. بلوک catch به سادگی باعث رخداد آن استثنا با استفاده از کلمه کلیدی throw می شود. این کنترل در بلوک catch در ()Method1 انجام می شود، جایی که دوباره همان استثنا را re-throw می کند و در نهایت در متد ()Main مدیریت می شود. ردیابی پشته ای (stack trace) این استثنا به شما جزئیات کاملی را می دهد که دقیقاً کجا این استثنا رخ داده است.
اگر یک استثنا را دوباره با استفاده از پارامتر استثنا re-throw کنید، استثنا اصلی را حفظ نمی کند و یک استثنا جدید ایجاد می کند. مثال زیر این مطلب را نشان می دهد.
خروجی قطعه کد بالا عبارت است از:
در مثال بالا، استثنایی که در متد ()Main گرفتار شده است، ردیابی پشته ای را از Method1 و متد Main نمایش می دهد. Method1 را در ردیابی پشته ای نمایش نمی دهد زیرا ما استثنا را در ()Method1 با استفاده از throw ex دوباره ایجاد می کنیم. بنابراین، هرگز با استفاده از <throw <exception parameter استثناء را throw نکنید.
نحوه ایجاد نوع استثنای سفارشی (custom exception) در بخش بعدی آموزش داده می شود.