using System; using System.Collections.Generic; namespace org.budnhead { public interface IBufferedValue { void buffer(); object getBufferedValue(); object getValue(); } public class BufferedValueInstance : IDisposable,IBufferedValue { static List bufferedValues = new List(); static public void cycle(){ Console.WriteLine(String.Format("cycling buffered values [{0}]",bufferedValues.Count)); foreach (IBufferedValue bvi in bufferedValues){ bvi.buffer(); } } T value,bufferedValue; public BufferedValueInstance(){ BufferedValueInstance.bufferedValues.Add(this); } public BufferedValueInstance(T initialValue){ Value = initialValue; BufferedValueInstance.bufferedValues.Add(this); } public T Value { get { return this.value; } set { this.value = value; } } public T BufferedValue{ get { return this.bufferedValue; } } public void Dispose(){ BufferedValueInstance.bufferedValues.Remove(this); } public void buffer(){ this.bufferedValue = this.value; } public object getBufferedValue() { return this.bufferedValue; } public object getValue() { return this.value; } } }