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