BITKit/Packages/Runtime~/Core/Utility/References.cs

78 lines
1.6 KiB
C#
Raw Normal View History

2023-06-29 14:57:11 +08:00
namespace BITKit
2023-06-05 19:57:17 +08:00
{
public interface IReference
{
string Get();
}
2023-06-29 14:57:11 +08:00
2023-06-05 19:57:17 +08:00
public interface IReference<T>
{
T Get();
}
2023-06-29 14:57:11 +08:00
2023-06-05 19:57:17 +08:00
[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();
}
2023-06-29 14:57:11 +08:00
2023-06-05 19:57:17 +08:00
[System.Serializable]
public abstract record References<T> : IReference<T>
{
public abstract T Get();
public static implicit operator T(References<T> self) => self.Get();
}
2023-06-29 14:57:11 +08:00
2023-06-05 19:57:17 +08:00
[System.Serializable]
public record Reference : References
{
2023-06-29 14:57:11 +08:00
public Reference()
{
}
2023-06-05 19:57:17 +08:00
public Reference(string value)
{
this.value = value;
}
public string value;
public override string Get() => value;
}
2023-06-29 14:57:11 +08:00
2023-06-05 19:57:17 +08:00
[System.Serializable]
public record Reference<T> : References<T>
{
public T value;
2023-06-29 14:57:11 +08:00
public Reference()
{
}
public Reference(T value)
{
this.value = value;
}
2023-06-05 19:57:17 +08:00
public override T Get() => value;
}
2023-06-29 14:57:11 +08:00
#if NET5_0_OR_GREATER
[Serializable]
public class DataReference<T>:IReference<T>
{
public string Key;
public DataReference(){}
public DataReference(string key)
{
Key = key;
}
public T Get() => Data.Get<T>(Key);
public static implicit operator T(DataReference<T> self)
{
return self.Get();
}
}
#endif
2023-06-05 19:57:17 +08:00
}