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

Другие вопросы по тегам