61. finally keyword

לעתים בכתיבת קוד, אנחנו כותבים קוד מהצורה הבאה:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FileStream stream = null;
try
{
stream =
new FileStream("DailyTip.txt", FileMode.Open);
// Do a lot of dangerous things here
stream.Close();
}
catch (Exception e)
{
// Write to log
if (stream != null)
{
stream.Close();
}
}

כלומר, בסוף אנחנו בכל מקרה רוצים לסגור את הקובץ.

השיטה הנכונה היא להשתמש בkeyword ששמו finally שתפקידו הוא לוודא שפעולה שאנחנו רוצים קורית בסופו של דבר אחרי block של try-catch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
try
{
stream =
new FileStream("DailyTip.txt", FileMode.Open);
// Do a lot of dangerous things here
}
catch (Exception e)
{
// Write to log
}
finally
{
if (stream != null)
{
stream.Close();
}
}

שימו לב שאפשר לשאול מה יקרה אם יעוף exception בClose בתוך הfinally. ובכן, ברוב הפונקציות שאנחנו נרצה לקרוא להן גם במקרה של הצלחה וגם במקרה של כשלון (כלומר בfinally) חשבו על זה, ולכן הפונקציות האלה לא זורקות exceptionים. 😃

לדוגמה:

A call to Close is required for proper operation of a stream. Following a call to Close, other operations on the stream could throw exceptions. If the stream is already closed, a call to Close throws no exceptions.

שבוע גשום טוב

שתף