私は外部デバイスと通信するソフトウェアに取り組んでいます。デバイスには、初期化値のセット(calibrationData)が必要です。これらのキャリブレーションデータは、この機器の部品ごとに異なります。最初のバージョンでは、較正データをユーザが選択することができ、したがって、ユーザは、偶然、異なる部分で得られた較正データをロードすることができる。デバイスは機能しますが、正しく測定されません。 私はデバイスに接続されているよ前にIDをチェックすることはできませんよコンストラクタの最後にスロー例外がオブジェクトにダメージを与えますか?
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.");
}
を持っています。
この質問は2つのうち実際に含まれています。
私の解決策は正しいですか?私は適切なキャリブレーションの使用を自動的にテストし、プログラマに依存しないで別のメソッド(Instrument.AreYouProperlyCalibrated()のようなもの)を呼び出すために私のコードを使用します。
例外が最後にスローされたときコンストラクタの?私はちょっと頭がおかしくなっています。建設業者が完成した後、C#がいくらか不安を抱いていて、ctorが例外を投げた場合にこれが異なるかもしれないということです。
おかげ
MarcとYuriyはかなり私が思うすべてをカバーしています。私はちょうどあなたがクラスのために持っているファイナライザはコンストラクタが完全に完了していないにもかかわらず実行されますので、ファイナライザ(それはとにかく持っているように見えない)でそれを認識しても追加することを追加します。 –