62. IDisposable interface

מדי פעם אנחנו נתקלים בinterface ששמו IDisposable.

מדובר בממשק שנראה ככה:

1
2
3
4
public interface IDisposable
{
void Dispose();
}

ויש לו מתודה אחת שקוראים לה Dispose.

המתודה אחראית לנקות את כל המשאבים של האובייקט.

באופן כללי, הממשק הומצא כדי לנקות משאבים שהם unmanaged (למשל גישה לקבצים, פקדים וכו’) –

הGarbage Collector מנקה באופן אוטומטי אובייקטים שהם managed ברגע שהם לא נמצאים יותר בשימוש, אבל אי אפשר לדעת מתי הוא יפעל. פרט לזאת, הGarbage Collector לא מכיר משאבים שהם unmanaged.

המטרה של הממשק היא לנקות את המשאבים הunmanaged באופן ייזום. מחזיק של אובייקט יכול לקרוא לDispose כאשר אין לו צורך באובייקט יותר.


מימוש:

מומלץ לממש במידה והאובייקט שלנו משתמש בעצמו במשאבים שהם unmanaged, (קבצים, פקדים, Threadים וכו’), גם אם הוא משתמש בעטיפות שלהם.

בנוסף, מומלץ לממש אם ברצונכם לאפשר לקרוא באופן ייזום לניקיון של האובייקט.

שימוש:

מומלץ להשתמש בממשק באמצעות בלוק של try וfinally, למשל:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
OleDbCommand command = new OleDbCommand();
OleDbTransaction transaction = command.Transaction;
try
{
transaction.Begin();
// Do risky things here.
transaction.Commit();
}
finally
{
if (transaction != null)
{
transaction.Dispose();
}
}

יום גשום טוב

שתף