Должен ли класс, в котором есть поле 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();
}
}
1 ответ
Нет, один из основных моментов использования SafeFileHandle
это он содержит финализации, что очищает неуправляемый ресурс, связанный с ручкой.