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; }