Files
forkmessager/apps/server-net/src/Shared/Knot.Shared.Kernel/Entity.cs
Халимов Рустам 8f2de0e9bf Форматирование
2026-03-19 01:31:43 +03:00

52 lines
1.1 KiB
C#

namespace Knot.Shared.Kernel;
/// <summary>
/// Базовый класс для всех сущностей в системе.
/// </summary>
/// <typeparam name="TId">Тип идентификатора сущности.</typeparam>
public abstract class Entity<TId> : IEquatable<Entity<TId>>
where TId : notnull
{
public TId Id { get; protected set; }
protected Entity(TId id)
{
Id = id;
}
public override bool Equals(object? obj)
{
return obj is Entity<TId> entity && Equals(entity);
}
public bool Equals(Entity<TId>? other)
{
if (other is null)
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
return Id.Equals(other.Id);
}
public static bool operator ==(Entity<TId>? left, Entity<TId>? right)
{
return Equals(left, right);
}
public static bool operator !=(Entity<TId>? left, Entity<TId>? right)
{
return !Equals(left, right);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}