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

66 lines
1.8 KiB

3 months ago
using System;
namespace Kean.Domain
{
/// <summary>
/// 实体对象
/// </summary>
public abstract class Entity<T> where T : struct
{
/// <summary>
/// 唯一标识
/// </summary>
public T Id { get; protected set; }
/// <summary>
/// 相等运算符
/// </summary>
/// <param name="left">运算符左侧值对象</param>
/// <param name="right">运算符右侧值对象</param>
/// <returns>运算结果</returns>
public static bool operator ==(Entity<T> left, Entity<T> right)
{
if (left is null ^ right is null)
{
return false;
}
return left.Equals(right);
}
/// <summary>
/// 不等运算符
/// </summary>
/// <param name="left">运算符左侧值对象</param>
/// <param name="right">运算符右侧值对象</param>
/// <returns>运算结果</returns>
public static bool operator !=(Entity<T> left, Entity<T> right)
{
return !(left == right);
}
/// <summary>
/// 指定的值对象是否等于当前值对象
/// </summary>
/// <param name="obj">与当前值对象比较的值对象</param>
/// <returns>比较结果</returns>
public override bool Equals(object obj)
{
if (obj is Entity<T> entity)
{
return Id.Equals(entity.Id);
}
else
{
return false;
}
}
/// <summary>
/// 返回此值对象的哈希代码
/// </summary>
/// <returns>32 位有符号整数哈希代码</returns>
public override int GetHashCode() =>
HashCode.Combine(Id);
}
}