You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

410 lines
10 KiB
C#

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