using System; namespace XP.Hardware.RaySource.Abstractions { /// /// 射线源抽象基类 | Abstract Base Class for X-Ray Sources /// 提供策略接口的基础实现框架 | Provides foundational implementation framework for strategy interface /// public abstract class XRaySourceBase : IXRaySource { protected bool _isDisposed = false; protected bool _isInitialized = false; protected bool _isConnected = false; /// /// 射线源名称(用于日志)| X-ray source name (for logging) /// public virtual string SourceName => "Generic X-Ray Source"; /// /// 是否已连接 | Is connected /// public virtual bool IsConnected => _isConnected && _isInitialized; #region IXRaySource Implementation public abstract XRayResult Initialize(); public abstract XRayResult ConnectVariables(); public abstract XRayResult TurnOn(); public abstract XRayResult TurnOff(); public abstract XRayResult CloseOff(); public abstract XRayResult SetVoltage(float voltage); public abstract XRayResult SetCurrent(float current); public abstract XRayResult SetFocus(float focus); public abstract XRayResult ReadVoltage(); public abstract XRayResult ReadCurrent(); public abstract XRayResult ReadSystemStatus(); public abstract XRayResult CheckErrors(); public abstract XRayResult TxiOn(); public abstract XRayResult TxiOff(); public abstract XRayResult WarmUp(); public abstract XRayResult Training(); public abstract XRayResult FilamentCalibration(); public abstract XRayResult AutoCenter(); public abstract XRayResult SetPowerMode(int mode); #endregion #region IDisposable Implementation /// /// 释放资源 | Release resources /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// 受保护的释放方法 | Protected dispose method /// /// 是否由用户代码调用 | Whether called from user code protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { // 释放托管资源 | Release managed resources try { // 尝试安全关闭 | Attempt safe shutdown if (_isInitialized) { CloseOff(); } } catch (Exception ex) { Console.WriteLine( $"[射线源关闭异常 | X-Ray Source Close Exception] {SourceName}: {ex.Message}"); } } _isDisposed = true; } } /// /// 析构函数(作为安全网)| Finalizer (as safety net) /// ~XRaySourceBase() { Dispose(false); } #endregion } }