我正在开发与外部设备通信的软件。该设备需要一组初始化值(calibrationData)。这些设备的校准数据有所不同。在第一个版本中,校准数据可以由用户选择,因此用户可能会意外加载在不同部件上获得的校准数据。该设备将工作,但将不正确的措施。 我在构造函数结束时抛出异常是否会损坏对象?
public Instrument(CalibrationData calibration)
{
_camera = new Camera();
_driver = new Driver();
if (_camera.GetUniqueId() != calibration.GetCameraUniqueId())
throw new WrongCalibrationException("Calibration file was obtained on different equipment.");
//Don't write anything here. Exception has to be the last code in the constructor.
}
,然后其他
try
{
instrument = new Instrument(calibration);
}
catch (WrongCalibrationException e)
{
MessageBox.Show("You tried to load calibration obtained on different device.");
}
地方我不能够检查ID我连接到设备前。
这个问题其实包含两个。
我的解决方案是否正确?我想自动测试正确校准的用法,而不依赖于程序员使用我的代码调用另一种方法(类似Instrument.AreYouProperlyCalibrated())
当在最后抛出异常时正确构造对象的构造函数?我有点担心C#在construcor完成之后正在做一些巨型巨无霸,而且在ctor抛出异常的情况下这可能会有所不同。
感谢
Marc和Yuriy几乎涵盖了我所想的一切。我只是补充说,即使构造函数没有完全完成,任何您为该类提供的终结器仍将运行,因此请注意终结器中(您似乎没有看到)。 – 2011-12-16 08:24:00