add UniquieID abstract base class

This commit is contained in:
2023-08-02 06:39:56 +02:00
parent ef85aea1c5
commit 8fcb6a42d3
2 changed files with 61 additions and 36 deletions

View File

@@ -0,0 +1,57 @@
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);
}
}