namespace BITKit { public interface IReference { string Get(); } public interface IReference { T Get(); } [System.Serializable] public abstract record References : IReference { public abstract string Get(); public static implicit operator string(References self) => self.Get(); public override string ToString() => Get(); } [System.Serializable] public abstract record References : IReference { public abstract T Get(); public static implicit operator T(References self) => self.Get(); } [System.Serializable] public record Reference : References { public Reference() { } public Reference(string value) { this.value = value; } public string value; public override string Get() => value; } [System.Serializable] public record Reference : References { public T value; public Reference() { } public Reference(T value) { this.value = value; } public override T Get() => value; } #if NET5_0_OR_GREATER [Serializable] public class DataReference:IReference { public string Key; public DataReference(){} public DataReference(string key) { Key = key; } public T Get() => Data.Get(Key); public static implicit operator T(DataReference self) { return self.Get(); } } #endif }