فلسفه وجودی بخش finally در try catch چیست؟
نویسنده: فانوس
تاریخ: ۱۳۹۲/۰۷/۰۹ ۱۱:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
try {
int i=0;
string s = "hello";
i = Convert.ToInt32(s);
} catch (Exception ex)
{
Console.WriteLine("Error");
}
Console.WriteLine("I am here!"); public static int GetMyInt()
{
try {
for (int i=10;i>=0;i--)
Console.WriteLine(10/i);
return 1;
} catch
{
Console.WriteLine("Error!");
}
finally {
Console.WriteLine("ok");
}
Console.WriteLine("can you reach here?");
return -1;
} public static int GetMyInt()
{
try {
for (int i=10;i>=1;i--)
Console.WriteLine(10/i);
return 1;
} catch
{
Console.WriteLine("Error!");
}
finally {
Console.WriteLine("ok");
}
Console.WriteLine("can you reach here?");
return -1;
} public int GetUserId(string nickname)
{
SqlConnection connection = new SqlConnection(...);
SqlCommand command = connection.CreateCommand();
command.CommandText = "select id from users where nickname like @nickname";
command.Parameters.Add(new SqlParameter("@nickname", nickname));
try {
connection.Open();
return Convert.ToInt32(command.ExecuteScalar());
}
catch(SqlException exception)
{
// some exception handling
return -1;
} finally {
if (connection.State == ConnectionState.Open)
connection.Close();
}
// if all things works, you can not reach here
} - اینکه شما بروز یک مشکل رو با یک عدد منفی از یک متد بازگشت میدید یعنی هنوز دید زبان C رو دارید. در دات نت وجود استثناءها دقیقا برای ننوشتن return 0 یا -1 و شبیه به آن هست. در این حالت برنامه خودکار در هر سطحی که باشد، ادامهاش متوقف میشه و نیازی نیست تا مدام خروجی یک متد رو چک کرد.
- اینکه در یک متد کانکشنی برقرار شده و بسته شده یعنی ضعف کپسوله سازی مفاهیم ADO.NET. نباید این مسایل رو مدام در تمام متدها تکرار کرد. میشه یک متد عمومی ExecSQL درست کرد بجای تکرار مدام یک سری کد.
- یک سری از اشیاء اینترفیس IDisposable رو پیاده سازی میکنند مثل همین شیء اتصالی که ذکر شد. در این حالت میشه از using استفاده کرد بجای try/finally و اون وقت به دوتا using نیاز خواهید داشت یعنی شیء Command هم نیاز به try/finally داره.