具有SafeFileHandle字段的类是否应该实现Finalizer



我在.NetCore控制台应用程序中有以下类。此类具有FileStream和SafeFileHandle字段。我正在使用pInvoke创建文件并将结果分配给SafeFileHandle实例。

这个类应该有Finalizer实现吗?

public class MyClass : IDisposable
{
private SafeFileHandle m_handleValue;
private FileStream m_fileStream;

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess,
uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
uint dwFlagsAndAttributes, IntPtr hTemplateFile);

public void CreateFile()
{
m_handleValue = CreateFile(m_path,
GENERIC_WRITE | GENERIC_READ,
SHARE_MODE_READ_WRITE, 
IntPtr.Zero,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, 
IntPtr.Zero);
m_fileStream = new FileStream(m_handleValue, FileAccess.ReadWrite);
}
public void CloseStream()
{
m_handleValue.Close();
}
public void Write(long offset, byte[] data)
{
m_fileStream.Seek(offset, SeekOrigin.Begin);
m_fileStream.Write(data, 0, data.Length);
}
public byte[] Read(long offset, int length)
{
var buffer = new byte[length];
m_fileStream.Seek(offset, SeekOrigin.Begin);
m_fileStream.Read(buffer, 0, length);
return buffer;
}
public void Dispose()
{
m_handleValue?.Dispose();
m_fileStream?.Dispose();
}
}

否,使用SafeFileHandle的要点之一是包含清理与句柄相关的非托管资源的终结器。

最新更新