Files
Pilz/Pilz.Cryptography/UniquieIDBase.cs

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);
}
}