我正在構建一個派生自Stream
的類來包裝COM IStream。然而,我遇到了一個問題,我需要毫不猶豫地發佈COM IStream。實現對從流派生的類進行處理
好吧,這很容易,只需在Dispose
方法中使用Marshal.ReleaseComObject
即可。不過我不確定那很簡單。 Stream
基類已具有受保護的虛擬方法Dispose(boolean)
。這是我的第一個想法: -
~ComStreamWrapper()
{
if (!_Disposed)
{
iop.Marshal.FreeCoTaskMem(_Int64Ptr);
iop.Marshal.ReleaseComObject(_IStream);
}
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (!_Disposed)
{
if (disposing)
{
iop.Marshal.FreeCoTaskMem(_Int64Ptr);
iop.Marshal.ReleaseComObject(_IStream);
}
_Disposed = true;
}
}
你會注意到有沒有執行Dispose()
本身。我目前正在做假設,Stream
現有的實施做我所需要的。這就是要求Diposing(true)
和GC.SuppressFinalize
。這個假設是錯誤的嗎?
我錯過了什麼嗎?有更好的方法嗎?你在這個answer中看到了更多的基礎課程來解決一個更加棘手的問題。
bas類已經有了一個析構函數(Finalizer)。 – 2010-04-26 14:07:42
流類是抽象的,沒有終結器。 – 2010-04-26 14:23:53
看來你是對的,我的錯誤。 – 2010-04-26 15:16:42