public class MonitorableSourceExample
{
    private readonly MonitorableSource<int> _a;
    private readonly MonitorableSource<int> _b;
    private readonly MonitorableSource<int> _c;

    public MonitorableSourceExample()
    {
        _a = new MonitorableSource<int>();
        _b = new MonitorableSource<int>();
        _c = new MonitorableSource<int>();
    }

    public Monitorable<int> A => _a.Monitorable;

    public Monitorable<int> B => _b.Monitorable;

    public Monitorable<int> C => _c.Monitorable;
}


public class MonitorableUsingExample
{
    private readonly MonitorableSourceExample _something;

    public MonitorableUsingExample()
    {
        _something = new MonitorableSourceExample();
        _something.A.Updated += (sender, args) =>
        {
            // do something on A changing
        };
    }

    public int ADouble => _something.A.Value * 2;
}