using System; namespace VegasToTempoBlasterPlugin { public class RemotePropertyValue { private T _value; private bool _valueChanged; public T Value { get { return _value; } set { if (!value.Equals(_value)) { _value = value; _valueChanged = true; } } } public bool ValueChanged { get { return _valueChanged; } private set { _valueChanged = value; } } public static implicit operator T(RemotePropertyValue a) { return a.Value; } private class RemotePropertyExchange : IDisposable { private readonly RemotePropertyValue _internalValue; public RemotePropertyExchange(RemotePropertyValue internalValue) { _internalValue = internalValue; } public void Dispose() { _internalValue.ValueChanged = false; } } public IDisposable ClearValueChanged() { return new RemotePropertyExchange(this); } } }