using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HslCommunication.BasicFramework { /**************************************************************************** * * 系统的版本号类,版本号命名规则,应遵循兼容性规则 * * * ***************************************************************************/ /// /// 系统版本类,由三部分组成,包含了一个大版本,小版本,修订版,还有一个开发者维护的内部版 /// [Serializable] public sealed class SystemVersion { #region Constructor /// /// 根据格式化字符串的版本号初始化 /// /// 格式化的字符串,例如:1.0或1.0.0或1.0.0.0503 public SystemVersion(string VersionString) { string[] temp = VersionString.Split('.'); if (temp.Length >= 2) { m_MainVersion = Convert.ToInt32(temp[0]); m_SecondaryVersion = Convert.ToInt32(temp[1]); } if (temp.Length >= 3) { m_EditVersion = Convert.ToInt32(temp[2]); } if (temp.Length >= 4) { m_InnerVersion = Convert.ToInt32(temp[3]); } } /// /// 根据指定的数字实例化一个对象 /// /// 主版本 /// 次版本 /// 修订版 public SystemVersion(int main, int sec, int edit) { m_MainVersion = main; m_SecondaryVersion = sec; m_EditVersion = edit; } /// /// 根据指定的数字实例化一个对象 /// /// 主版本 /// 次版本 /// 修订版 /// 内部版本号 public SystemVersion(int main, int sec, int edit, int inner) { m_MainVersion = main; m_SecondaryVersion = sec; m_EditVersion = edit; m_InnerVersion = inner; } #endregion #region Private Member private int m_MainVersion = 2; // 主版本 private int m_SecondaryVersion = 0; // 次版本 private int m_EditVersion = 0; // 修订版 private int m_InnerVersion = 0; // 内部版 #endregion #region Public Properties /// /// 主版本 /// public int MainVersion { get { return m_MainVersion; } } /// /// 次版本 /// public int SecondaryVersion { get { return m_SecondaryVersion; } } /// /// 修订版 /// public int EditVersion { get { return m_EditVersion; } } /// /// 内部版本号,或者是版本号表示为年月份+内部版本的表示方式 /// public int InnerVersion { get { return m_InnerVersion; } } #endregion #region Object Override /// /// 根据格式化为支持返回的不同信息的版本号 /// C返回1.0.0.0 /// N返回1.0.0 /// S返回1.0 /// /// 格式化信息 /// 版本号信息 public string ToString(string format) { if (format == "C") { return $"{MainVersion}.{SecondaryVersion}.{EditVersion}.{InnerVersion}"; } if (format == "N") { return $"{MainVersion}.{SecondaryVersion}.{EditVersion}"; } if (format == "S") { return $"{MainVersion}.{SecondaryVersion}"; } return ToString(); } /// /// 获取版本号的字符串形式,如果内部版本号为0,则显示时不携带 /// /// 版本号信息 public override string ToString() { if (InnerVersion == 0) { return ToString( "N" ); } else { return ToString( "C" ); } } /// /// 判断两个实例是否相等 /// /// 版本号 /// 是否一致 public override bool Equals( object obj ) { return base.Equals( obj ); } /// /// 获取哈希值 /// /// 哈希值 public override int GetHashCode( ) { return base.GetHashCode( ); } #endregion #region operator implementation /// /// 判断是否相等 /// /// 第一个版本 /// 第二个版本 /// 是否相同 public static bool operator == (SystemVersion SV1, SystemVersion SV2) { if (SV1.MainVersion != SV2.MainVersion) { return false; } if (SV1.SecondaryVersion != SV2.SecondaryVersion) { return false; } if (SV1.m_EditVersion != SV2.m_EditVersion) { return false; } if (SV1.InnerVersion != SV2.InnerVersion) { return false; } return true; } /// /// 判断是否不相等 /// /// 第一个版本号 /// 第二个版本号 /// 是否相同 public static bool operator != (SystemVersion SV1, SystemVersion SV2) { if (SV1.MainVersion != SV2.MainVersion) { return true; } if (SV1.SecondaryVersion != SV2.SecondaryVersion) { return true; } if (SV1.m_EditVersion != SV2.m_EditVersion) { return true; } if (SV1.InnerVersion != SV2.InnerVersion) { return true; } return false; } /// /// 判断一个版本是否大于另一个版本 /// /// 第一个版本 /// 第二个版本 /// 是否相同 public static bool operator > (SystemVersion SV1, SystemVersion SV2) { if (SV1.MainVersion > SV2.MainVersion) { return true; } if (SV1.MainVersion < SV2.MainVersion) { return false; } if (SV1.SecondaryVersion > SV2.SecondaryVersion) { return true; } if (SV1.SecondaryVersion < SV2.SecondaryVersion) { return false; } if (SV1.EditVersion > SV2.EditVersion) { return true; } if (SV1.EditVersion < SV2.EditVersion) { return false; } if (SV1.InnerVersion > SV2.InnerVersion) { return true; } if (SV1.InnerVersion < SV2.InnerVersion) { return false; } return false; } /// /// 判断第一个版本是否小于第二个版本 /// /// 第一个版本号 /// 第二个版本号 /// 是否小于 public static bool operator < (SystemVersion SV1, SystemVersion SV2) { if (SV1.MainVersion < SV2.MainVersion) { return true; } if (SV1.MainVersion > SV2.MainVersion) { return false; } if (SV1.SecondaryVersion < SV2.SecondaryVersion) { return true; } if (SV1.SecondaryVersion > SV2.SecondaryVersion) { return false; } if (SV1.EditVersion < SV2.EditVersion) { return true; } if (SV1.EditVersion > SV2.EditVersion) { return false; } if (SV1.InnerVersion < SV2.InnerVersion) { return true; } if (SV1.InnerVersion > SV2.InnerVersion) { return false; } return false; } #endregion } /// /// 版本信息类,用于展示版本发布信息 /// public sealed class VersionInfo { /// /// 版本的发行日期 /// public DateTime ReleaseDate { get; set; } = DateTime.Now; /// /// 版本的更新细节 /// public StringBuilder UpdateDetails { get; set; } = new StringBuilder(); /// /// 版本号 /// public SystemVersion VersionNum { get; set; } = new SystemVersion(1, 0, 0); /// /// 获取版本号 /// /// 字符串信息 public override string ToString() { return VersionNum.ToString(); } } }