我正在使用繼承並試圖理解使用IDisposable的最佳方式。下面是我的基類的一個例子。通過繼承使用IDisposable
我明白,如果我有一個類(讓在MyChild調用),從MyBase類繼承即使MyChild沒有實現IDisposable,如果MyChild被初始化Dispose方法將被執行(相信我說是正確的這)如果使用方法如下,
using(MyChild chl = new MyChild) {// some code};
我想雖然知道什麼是說我在MyChild類的對象,我要確保被處置。我是否必須實現IDisposable接口,並具有與MyBase類中相同的代碼,還是可以使用MyBase類中的代碼?我猜這就是爲什麼MyBase類中有一個受保護的虛擬Dispose方法?
我的基類
public class MyBase : IDisposable
{
// variables & methods declared here etc
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (myObj != null) releaseObject(myObj);
}
}
private static void releaseObject(object obj)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
}
}
感謝您的詳細信息。我正在使用Microsoft.Office.Interop。Excel和已閱讀關於在後臺運行的excel進程以及在我看到他們已經使用Marshal.ReleaseComObject的示例中的很多問題。你會建議使用FinalReleaseComObject嗎? – mHelpMe
@mHelpMe不,絕對不是。只要關閉它 - 在Excel COM對象上有'Close'或類似的東西來做到這一點。這將立即釋放Excel進程,與ReleaseComObject不同,它更友好。 – Luaan