۱۳۸۸/۰۳/۰۵

finally در سي شارپ چه زماني اجرا نمي‌شود؟


عموما از كدهاي قرار گرفته در قطعه finally جهت آزاد سازي منابع استفاده مي‌شود و تضمين شده است كه اين قطعه همواره اجرا مي‌گردد، صرفنظر از اينكه آيا در قطعه try استثنايي رخ داده است يا خير.

اما مثال زير را در نظر بگيريد:

using System;

namespace testWinForms87
{
class CTestFinally
{
public static void Run()
{
try
{
TryAndTry();
}
catch (Exception exError)
{
Console.WriteLine(exError.Message);
}
finally
{
Console.WriteLine("Finally...!");
}
Console.ReadKey();
}

static void TryAndTry()
{
try
{
TryAndTry();
}
catch (Exception exError)
{
Console.WriteLine(exError.Message);
}
finally
{
Console.WriteLine("Try: Finally...!");
}
}
}

}

در اين كد به علت بروز stack overflow هيچگاه به finally نخواهيم رسيد.