Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface IFoo<T>
- {
- event Action<T> ChangeValue;
- event Action<object> ChangeObject;
- event Action ChangeEmpty;
- void InvokeChange(T value);
- }
- IFoo<int> test = new Foo<int>();
- test.ChangeEmpty += () => Console.WriteLine("0) Empty!");
- test.ChangeObject += (o) => Console.WriteLine("1) Object: {0}", o);
- test.ChangeValue += (v) => Console.WriteLine("2) Value: {0}", v);
- test.ChangeObject += (o) => Console.WriteLine("3) Object: {0}", o);
- test.ChangeEmpty += () => Console.WriteLine("4) Empty!");
- test.InvokeChange(123);
- 0) Empty!
- 1) Object: 123
- 2) Value: 123
- 3) Object: 123
- 4) Empty!
- public static void Main()
- {
- IFoo<int> test = new Foo<int>();
- test.ChangeEmpty += EmptyHandler;
- test.ChangeObject += ObjectHandler;
- Console.WriteLine("1) EMPTY, OBJECT");
- test.InvokeChange(1);
- test.ChangeEmpty -= EmptyHandler;
- test.ChangeValue += ValueHandler;
- Console.WriteLine("2) OBJECT, VALUE");
- test.InvokeChange(2);
- test.ChangeObject -= ObjectHandler;
- Console.WriteLine("3) VALUE ");
- test.InvokeChange(3);
- test.ChangeObject += ObjectHandler;
- test.ChangeEmpty += EmptyHandler;
- test.ChangeValue += ValueHandler;
- Console.WriteLine("4) VALUE, OBJECT, EMPTY, VALUE");
- test.InvokeChange(4);
- test.ChangeValue -= ValueHandler;
- test.ChangeValue -= ValueHandler;
- test.ChangeEmpty -= EmptyHandler;
- test.ChangeObject -= ObjectHandler;
- Console.WriteLine("5) <NONE>");
- test.InvokeChange(5);
- }
- static void EmptyHandler() { Console.WriteLine(" - Empty!"); }
- static void ObjectHandler(object val) { Console.WriteLine(" - Object: {0}", val); }
- static void ValueHandler(int val) { Console.WriteLine(" - Value: {0}", val); }
- 1) EMPTY, OBJECT
- - Empty!
- - Object: 1
- 2) OBJECT, VALUE
- - Object: 2
- - Value: 2
- 3) VALUE
- - Value: 3
- 4) VALUE, OBJECT, EMPTY, VALUE
- - Value: 4
- - Object: 4
- - Empty!
- - Value: 4
- 5) <NONE>
- public event Action<T> ChangeValue = delegate {};
- private Dictionary<System.Action<object>, List<System.Action<T>>> ObjectEventProxies
- = new Dictionary<System.Action<object>, List<System.Action<T>>>();
- public event System.Action<object> ChangeObject
- {
- add
- {
- List<System.Action<T>> eventProxies;
- if(!ObjectEventProxies.TryGetValue(value, out eventProxies))
- {
- eventProxies = new List<System.Action<T>>();
- ObjectEventProxies.Add(value, eventProxies);
- }
- System.Action<T> proxy = (T v) => value.Invoke(v);
- eventProxies.Add(proxy);
- ChangeValue += proxy;
- }
- remove
- {
- List<System.Action<T>> eventProxies;
- if (ObjectEventProxies.TryGetValue(value, out eventProxies))
- {
- System.Action<T> proxy = eventProxies[eventProxies.Count - 1];
- eventProxies.RemoveAt(eventProxies.Count - 1);
- ChangeValue -= proxy;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement