我不认为这个问题已经被问过。 我有点困惑的最佳方式来实现IDisposable
的密封类,具体而言,一个密封类,没有从基类继承。 (即,一个“纯密封类”,这是我的由术语。)
也许有些你同意我在执行这些准则IDisposable
都非常混乱。 不过,我想知道,我打算实施方式IDisposable
是足够的,安全的。
我做了一个分配部分的P / Invoke代码IntPtr
通过Marshal.AllocHGlobal
和自然,我要处理干净我创建的非托管内存。 所以我想的是这样的
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public sealed class MemBlock : IDisposable
{
IntPtr ptr;
int length;
MemBlock(int size)
{
ptr = Marshal.AllocHGlobal(size);
length = size;
}
public void Dispose()
{
if (ptr != IntPtr.Zero)
{
Marshal.FreeHGlobal(ptr);
ptr = IntPtr.Zero;
GC.SuppressFinalize(this);
}
}
~MemBlock()
{
Dispose();
}
}
我假设,因为MemBlock
是完全密封的,从来没有从实现另一个类派生的virtual protected Dispose(bool disposing)
是没有必要的。
还有,就是终结严格必要吗? 所有的想法表示欢迎。