58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Pilz.Cryptography
|
|
{
|
|
public abstract class UniquieID : IUniquieID
|
|
{
|
|
protected static int currentSimpleID = 0;
|
|
|
|
[JsonProperty(nameof(ID))]
|
|
protected string _iD;
|
|
|
|
[JsonIgnore]
|
|
public virtual bool SimpleMode { get; set; } = false;
|
|
|
|
[JsonIgnore]
|
|
public virtual bool GenerateOnGet { get; set; } = false;
|
|
|
|
[JsonIgnore]
|
|
public virtual bool HasID => !string.IsNullOrEmpty(_iD);
|
|
|
|
[JsonIgnore]
|
|
public virtual string ID
|
|
{
|
|
get
|
|
{
|
|
if (GenerateOnGet)
|
|
GenerateIfNull();
|
|
return _iD;
|
|
}
|
|
internal set
|
|
=> _iD = value;
|
|
}
|
|
|
|
public abstract void Generate();
|
|
public abstract override bool Equals(object obj);
|
|
|
|
public virtual void GenerateIfNull()
|
|
{
|
|
if (!HasID) Generate();
|
|
}
|
|
|
|
public override string ToString() => ID;
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD);
|
|
}
|
|
|
|
public static implicit operator string(UniquieID id) => id.ID;
|
|
|
|
public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
|
|
public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
|
|
}
|
|
}
|