public class Reference<T>
{
    private T _value;
    public T Value { get => _value; set => _value = value; }
    public Reference() : this(default) { }
    public Reference(T initial = default)
    {
        _value = initial;
    }
    public static implicit operator Reference<T>(T value) => new Reference<T>(value);
    public static implicit operator T(Reference<T> reference) => reference.Value;
}