using System; namespace RosettaUI { public abstract class BinderBase : IBinder { protected IGetter getter; protected BinderBase() { } protected BinderBase(IGetter getter) { this.getter = getter; } public void Set(T v) { if (!IsConst) SetInternal(v); } protected abstract void SetInternal(T t); #region IGetter public virtual bool IsNull => getter.IsNull; public virtual bool IsNullable => getter.IsNullable; public virtual Type ValueType => getter.ValueType; public virtual bool IsConst => getter.IsConst; public virtual T Get() => getter.Get(); #endregion #region IBinder public abstract bool IsReadOnly { get; } public virtual object GetObject() { return Get(); } public virtual void SetObject(object obj) { Set((T) obj); } #endregion } }