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