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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}
}