PDA

View Full Version : چرا عبارت Remaining program در این تکه کد اجرا نمی شود؟



complexcoding
یک شنبه 09 مرداد 1390, 11:24 صبح
با سلام می خواستم بدونم چرا عبارت remaining program در این تکه کد اجرا نمی شود
int a, b = 0 ;
Console.WriteLine( "My program starts" )
try
{
a = 10 / b;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;

خیلی ممنون از کمک شما.

mehdi.mousavi
یک شنبه 09 مرداد 1390, 11:29 صبح
سلام.
ابتدا کدهای درون try block اجرا میشه. از اونجاییکه مقدار b رو صفر قرار داده اید، Exception ای رخ میده. سپس کنترل به finally block منتقل میشه، اینجا عبارت finally نوشته میشه و در این نقطه، چون Exception مورد نظر رو Catch نکرده بودید، Throw خواهد شد و اجرا دیگه به خط Remaining Program نمیرسه.

موفق باشید.

complexcoding
یک شنبه 09 مرداد 1390, 11:56 صبح
خیلی ممنون ولی اگر throw یا همون پرتاب بشه مگه به خط بعد از finally نمی ره؟
مگه finally خودش exceptoin را catch نمی کنه؟ یعنی پس کی finally به درد بخوره؟

mehdi.mousavi
یک شنبه 09 مرداد 1390, 12:25 عصر
خیلی ممنون ولی اگر throw یا همون پرتاب بشه مگه به خط بعد از finally نمی ره؟
مگه finally خودش exceptoin را catch نمی کنه؟ یعنی پس کی finally به درد بخوره؟

خیر، finally خطا رو catch نمی کنه. وقتی در try خطایی رخ میده که exception ای باید throw بشه، سیستم بدنبال exception block مناسب میگرده تا اون exception رو بدست block مورد نظر بسپره. اگر بلاک مورد نظر وجود داشته باشه، اجرا به exception block منتقل میشه، و سپس کد درون finally اجرا میشه. اگر exception block وجود نداشته باشه، کد درون finally اجرا میشه و سپس exception مورد نظر throw میشه. در حقیقت finally محلی هستش که تضمین شده در صورت وقوع، یا عدم وقوع exception حتما اجرا خواهد شد. بنابراین کدی که در finally می نویسید کدی هستش که نیاز دارید در هر شرایطی اجرا بشه. فرضا میتونید کدهای Clean Up خودتون رو در اون بخش بنویسید...

موفق باشید.