我正在用C#为USB设备编写一个包装类(使用P / Invoke与它通信)。设备需要在使用前发送一个打开的消息,并在完成后发送一个close方法。在我的构造函数中,我想尝试打开设备并返回null
如果该调用因任何原因失败。我还会写一个Dispose()
来调用设备上的close方法。
这是一种合理的编码方式吗?或者我应该有一个单独的ConnectToDevice
方法吗?
通过将它放在构造函数中,我希望我的类的用户可以简单地写:
USBDevice myDevice = new USBDevice()
if (myDevice != null) {
myDevice.PerformAction();
myDevice.Dispose();
myDevice = null;
}
答案 0 :(得分:2)
如果构造函数失败,则引用将始终为null。但是,如果在错误之前已经分配了一些可处理资源,则调用者无法在实例上调用Dispose,因为他没有引用它。因此,如果要在构造函数中执行此操作,则需要确保构造函数正常失败。
为了简单起见,我可能会使用Connect方法。