using System; public class Program { public static void Main() { IFoo<int> test1 = new Foo<int>(); test1.ChangeEmpty += () => Console.WriteLine("0) Empty!"); test1.ChangeObject += (o) => Console.WriteLine("1) Object: {0}", o); test1.ChangeValue += (v) => Console.WriteLine("2) Value: {0}", v); test1.ChangeObject += (o) => Console.WriteLine("3) Object: {0}", o); test1.ChangeEmpty += () => Console.WriteLine("4) Empty!"); test1.InvokeChange(123); Console.WriteLine("\n--------\n"); IFoo<int> test2 = new Foo<int>(); test2.ChangeEmpty += EmptyHandler; test2.ChangeObject += ObjectHandler; Console.WriteLine("1) EMPTY, OBJECT"); test2.InvokeChange(1); test2.ChangeEmpty -= EmptyHandler; test2.ChangeValue += ValueHandler; Console.WriteLine("2) OBJECT, VALUE"); test2.InvokeChange(2); test2.ChangeObject -= ObjectHandler; Console.WriteLine("3) VALUE "); test2.InvokeChange(3); test2.ChangeObject += ObjectHandler; test2.ChangeEmpty += EmptyHandler; test2.ChangeValue += ValueHandler; Console.WriteLine("4) VALUE, OBJECT, EMPTY, VALUE"); test2.InvokeChange(4); test2.ChangeValue -= ValueHandler; test2.ChangeValue -= ValueHandler; test2.ChangeEmpty -= EmptyHandler; test2.ChangeObject -= ObjectHandler; Console.WriteLine("5) <NONE>"); test2.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); } }