C# : Garbage
Collection (三)
續前文,拜讀前輩文章後,提到我們須習慣將類別的Dispose方法定義為virtual,以便讓繼承此類別的子類別可以在他們的Dispose方法呼叫父類別的Dispose方法,確實做到回收父、子類別用到的記憶體。
續前文,拜讀前輩文章後,提到我們須習慣將類別的Dispose方法定義為virtual,以便讓繼承此類別的子類別可以在他們的Dispose方法呼叫父類別的Dispose方法,確實做到回收父、子類別用到的記憶體。
/// <summary>
///
Virtual Dispose
/// </summary>
public virtual
void Dispose()
{
DoDispseStep();
}
|
然後寫一個子類別 CChildClass,繼承CSampleClass
並在自己的Dispose方法中,呼叫父類別的Dispose方法: base.Dispose();
public class CChildClass
: CSampleClass, IDisposable
{
public
Dictionary<String,
String> Pets;
private
bool DisposedFlag = false;
/// <summary>
/// 建構
/// </summary>
public
CChildClass()
{
Pets = new
Dictionary<string,
string>();
}
/// <summary>
/// Dispose
/// </summary>
public virtual void Dispose()
{
if
(DisposedFlag == false)
{
Console.WriteLine("移除 Pets物件 {0} 筆資料", Pets.Count);
Pets = null;
//引用父類別的GC方法
base.Dispose();
DisposedFlag = true;
}
}
}
|
主程式就不寫了,當宣告一個CChildClass的物件後,並dispose他的時候,顯示以下訊息…
移除 Pets物件 1 筆資料 → 源自CChildClass的Dispose方法
移除 ownedCar物件 2 筆資料 → 源自CSampleClass的Dispose方法