我正在開發與外部設備通信的軟件。該設備需要一組初始化值(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