Хенк Холтерман ответил правильно: SerialPort - это управляемый ресурс, который сам владеет неуправляемым ресурсом и, следовательно, реализует IDisposable
.
Поскольку ваша оболочка владеет SerialPort, она косвенно владеет неуправляемым ресурсом SerialPort и, следовательно, должна реализовывать IDisposable. Ваша реализация неверна, принадлежащий экземпляр SerialPort следует утилизировать только в том случае, если disposing
имеет значение true, поскольку это управляемый ресурс.
Это должно быть реализовано следующим образом:
private void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// Dispose managed resources.
ClosePort();
WrappedSerialPort.DataReceived -= SerialPortDataReceived;
_wrappedSerialPort.Dispose();
}
_disposed = true;
}
}
Кроме того, как отмечает Хенк Холтерман, вам нужен деструктор только в том случае, если вы напрямую владеете неуправляемыми ресурсами, что здесь не так, и вы можете упростить реализацию IDisposable, избавившись от деструктора.