From 8fcb6a42d39df3cb3c5d5bf21402c7c4085b5056 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Wed, 2 Aug 2023 06:39:56 +0200 Subject: [PATCH] add UniquieID abstract base class --- Pilz.Cryptography/UniquieID.cs | 40 +++------------------ Pilz.Cryptography/UniquieIDBase.cs | 57 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 Pilz.Cryptography/UniquieIDBase.cs diff --git a/Pilz.Cryptography/UniquieID.cs b/Pilz.Cryptography/UniquieID.cs index dad0034..8d715a0 100644 --- a/Pilz.Cryptography/UniquieID.cs +++ b/Pilz.Cryptography/UniquieID.cs @@ -9,33 +9,8 @@ using System.Threading.Tasks; namespace Pilz.Cryptography { - public class UniquieID : IUniquieID + public class UniquieID : UniquieID { - private static int currentSimpleID = 0; - - [JsonProperty(nameof(ID))] - private string _iD; - - [JsonIgnore] - public string ID - { - get - { - if (GenerateOnGet) - GenerateIfNull(); - return _iD; - } - internal set - => _iD = value; - } - - [JsonIgnore] - public bool HasID { get => !string.IsNullOrEmpty(_iD); } - [JsonIgnore] - public bool SimpleMode { get; set; } = false; - [JsonIgnore] - public bool GenerateOnGet { get; set; } = false; - public UniquieID() : this(false) { } @@ -46,17 +21,13 @@ namespace Pilz.Cryptography GenerateIfNull(); } - public void Generate() + public override void Generate() { if (SimpleMode) ID = typeof(TargetType).ToString() + currentSimpleID++.ToString(); else ID = GenerateUniquieID(string.Empty); } - public void GenerateIfNull() - { - if (!HasID) Generate(); - } private static string GenerateUniquieID(string var) { @@ -92,14 +63,11 @@ namespace Pilz.Cryptography return Win32_PhysicalMedia_SerialNumber; } - public override string ToString() => ID; - public override bool Equals(object obj) { var res = false; - var iD = obj as UniquieID; - if (iD is object) + if (obj is UniquieID iD) { if (ReferenceEquals(res, iD)) res = true; @@ -130,7 +98,7 @@ namespace Pilz.Cryptography public override int GetHashCode() { - return -1430039477 + EqualityComparer.Default.GetHashCode(_iD); + return base.GetHashCode(); } public static implicit operator string(UniquieID id) => id.ID; diff --git a/Pilz.Cryptography/UniquieIDBase.cs b/Pilz.Cryptography/UniquieIDBase.cs new file mode 100644 index 0000000..418b715 --- /dev/null +++ b/Pilz.Cryptography/UniquieIDBase.cs @@ -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.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); + } +}