فصل نوزدهم اداره کردن استثناء در #C

<!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627400839 -2147483648 8 0 66047 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman";} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

فصل نوزدهم

C# اداره کردن استثناء در

آنچه که در این فصل یاد خواهید گرفت:

با مفهوم استثناء و نحو هی مدیریت آن توسط سیتم عامل آشنا خواهید شد.

با نحوه ی کنترل استثناءهای برنامه توسط برنام هنویس آشنا خواهید شد.

را برای اداره کردن استثنا/ئ به کار خواهید برد. try/catch/finally • ساختار

پیش بینی نشده است ایجاد خواهید کرد. NET. • استثناءهای سفارشی جهت تولید پیام های مناسبی که در

-1-19 مقدمه

یکی از مهمترین جنبههای مدیریت یک شی، اطمینان از رفتار و تعامل آن با سیستمهای دیگر است که با یک خطا، برنامه را

خاتمه ندهد. بدین معنی که باید یک برنامه با خطاهای زمان اجرا بصورت مطلوب رفتار نماید. اینکه آنها از خطای کد برنامه

یا خطاهای سختافزاری نشأت میگیرند. (FCL)

1 به منظور برخورد با شرایط خطا برای توسعهدهندگان (SEH) یک تکنیک بنام اداره کردن ساختیافتهی استثناء NET.

فراهم میسازد. هدف اصلی این است که،زمانی که یک استثناء رخ میدهد، یک شی استثناء ایجاد شده و کنترل برنامه به

شی استثناء از یک بخش به بخش دیگر که آن را درک میکند، منتقل ،NET. بخش خاصی از کد رد میشود. در اصطلاحات

میشود.

مزایای SEH ، در مقایسه با تکنیکهای اداره کردن خطا، که به کدهای خطا استناد میکنند و مقادیر بیتی را تنظیم میکنند

مهمی را پیشنهاد میکند:

استثناء همانند یک شی به برنامه رد میشود. خصوصیات آن، یک توصیف از استثناء، نام اسمبلی که استثناء را رد??

کرده است، مقداری از پشته که نشان دهنده دنبالهی فراخوانیهای منجر شده به این استثناء هستند، را شامل

میشوند.

برنامه را خاتمه میدهد. این عمل توسعه CLR ، اگر یک استثناء به برنامه رد شود و برنامه نتواند آن را درک کند??

دهنده را به اداره کردن خطا مجبور میسازد.

لازم نیست کد تشخیص و ادارهی استثناء در محل رخ دادن خطا قرار گیرد. بدین معنی که، کد اداره کردن استثناء??

میتواند در یک کلاس خاص مختص یافته به آن خطا قرار گیرد.

1 Structured exception handling

Mohsen_mahyar@yahoo.com - C# برنامه نویسی

326

،NET. استثناها در هر دو سطح برنامه و سیستم بطور سازگار و انحصاری استفاده میشوند. همه متدهای چارچوب??

زمانی که یک خطا رخ دهد استثناء رد میکنند.

قبل از مشاهد ه مکانیزم های واقعی پیاد هسازی اداره کردن استثناء، اجازه دهید خود استثناء را بررسی کنیم. همانطور که قبلاً

مشتق می شوند. پس فهم System.Exception از کلاس NET. شرح دادیم. استثناء یک کلاس است. همه استثناهای

این کلاس برای کار با استثناها ضروری است.

System.Exception -2-19 کلاس

کلاس پایه برای دو زیر کلاس کلی System.Exception . 1 نمایش داده شده اس ت - همانطور که در شکل 19

است که همه اشیاء استثناء از آنها ار ث بری م یکنند. ApplicationException و SystemException

مستقیماً از ( ArithmticException و IOException همچون )NET. استثناهای چارچوب

ApplicationException مشتق م یشوند، در حالی که استثناهای سفارشی برنامه از SystemException

ارث بری می کنند. تنها هدف این کلا س ها گرو ه بندی استثناهاس ت . چون آنها هیچ خصوصیت یا متدی به کلاس

اضافه نمی کنند. System.Exception پایه ی

1- شکل 19

1 اعضای این کلاس را خلاصه م یکند. - چند تا عضو دارد. جدول 19 System.Exception کلاس

1- جدول 19

خصوصیت نوع توصیف

که به مستندات کمکی اشاره می کند. URL یک String HelpLink

دارد، مگر اینکه استثناء در هنگام اداره کردن استثناء null مقدار Exception InnerException

م ی توان زنجیر ه ی GetBaseException دیگر رخ ده د . با متد

استثناهای تودرتو را یافت.

متنی که استثناء را شرح می دهد. String Message

نام اسمبلی که استثناء را تولید کرده است. String Source

دنباله ای از اسامی و نشان ه ی متدها که قبل از استثناء فراخوانی String StackTrace

شده اند. این اطلاعات در خطازدایی ارزشمند هستند.

جرئیاتی در مورد متدی که استثناء را رد کرده است فراهم م ی کند . MethodBase TargetSite

نام متدی که استثناء در آن اتفاق افتاده است را بر م ی گرداند . آن

فصل نوزدهم اداره کردن استثناها

327

دارد که نام کلاس مربوط به DeclaringType یک خصوصیت بنام

متد را بر می گرداند.

استفاده Com این خصوصیت محافظت شده در زمان کار با کد Int32 HResult

رد Com می شود. زمانی که یک استثنا به یک سروی س گیرنده ی

در دنیای کد مدیریت نشده HResult می شود، این مقدار به یک

تبدیل می گردد.

-3-19 کدنویسی برای اداره کردن استثناها

2) به کار م یبرد. - برای پیاده سازی اداره کردن استثناء (شکل 19 try/catch/finally یک ساختار #C

ی را جستجو م ی کند که م ی تواند استثناء جاری را اداره catch زمانی که یک استثناء رخ م ی دهد، سیستم بلوک

موجود در متد catch کند. آن جستجو را از متد جاری شروع م یکند و اگر پیدا نشود لیست بلو کهای

منطبق را پیدا نکند یک استثناء اداره catch فراخواننده ی این متد را جستجو م ی کند، اگر عمل جستجو بلوک

نشده رخ م ی دهد . همانطور که بعداً بررسی خواهیم کرد، برنامه کاربردی مسئول تعریف یک سیاست برای

برخورد با این استثناها است. به جزئیات کاربرد این سه بلوک توجه کنید.

2- شکل 19

try بلوک

را برای اداره finally یا Catch کد داخل این بلوک را ناحی ه ی محفظ می گویند، چون آن ناحیه بلو ک های

finally یا catch باید حداقل یک بلوک try کردن استثناهای ممکن یا حذف عوارض جانبی دارن د . هر بلوک

مرتبط با آن داشته باشد.

catch بلوک

Mohsen_mahyar@yahoo.com - C# برنامه نویسی

328

و به دنبال آن در داخل پرانتزه  ا یک عبارت به نام فیلتر استثناء را catch کلم ه ی کلیدی ،Catch یک بلوک

شامل می شو د . فیلتر استثناء، نوع استثناءی که آن جوابگر است را مشخص م ی کند . کد داخل بلوک عک س العمل

را پیاده سازی می کند.

فیلتر استثناء، استثنائی که آن اداره م ی کند را تعریف م ی کند و زمانی که یک استثناء به آن پاس داده م ی شود

آنرا بصورت یک پارامتر به کار می گیرد. دستور زیر را ملاحظه کنید.

/ 1 نظر / 47 بازدید
asrin

با سلام موضوعات سایت جالبه ولی فوق العاده درهم برهم راست چیناش کا اصلاً تنظیم نشده لطفاً کمی خواناتر پست بگذارید میبخشد که رک بودم ولی انتقاد خیلی وقتها سازنده س موفق باشید