public static int Main(string[] args) { // Make a car as usual. Car c1 = new Car("SlugBug", 100, 10); // Make sink object. CarEventSink sink = new CarEventSink("First sink"); CarEventSink myOtherSink = new CarEventSink("Other sink"); // Hand sink to Car. c1.Advise(sink); c1.Advise(myOtherSink); // Speed up (this will generate the events.) for (int i = 0; i < 10; i++) { c1.SpeedUp(20); } // Detach sink from events. c1.Unadvise(sink); // Speed up again (only myothersink will be called.) for (int i = 0; i < 10; i++) { c1.SpeedUp(20); } // Detach other sink from events. c1.Unadvise(myOtherSink); return(0); }
static void Main(string[] args) { Console.WriteLine("***** Interfaces as callbacks *****"); // Make a car as usual. Car c1 = new Car("SlugBug", 100, 10); // Make sink object. Console.WriteLine("\n***** Creating sinks *****"); CarEventSink sink = new CarEventSink("First sink"); CarEventSink myOtherSink = new CarEventSink("Other sink"); // Hand sink to Car. Console.WriteLine("\n***** Sending 2 sinks into Car *****"); c1.Advise(sink); c1.Advise(myOtherSink); // Speed up (this will generate the notifications.) Console.WriteLine("\n***** Speeding up *****"); for (int i = 0; i < 6; i++) { c1.Accelerate(20); } // Detach sink from events. Console.WriteLine("\n***** Removing first sink *****"); c1.Unadvise(sink); // Speed up again (only myothersink will be called.) Console.WriteLine("\n***** Speeding up again *****"); for (int i = 0; i < 6; i++) { c1.Accelerate(20); } // Detach other sink from events. Console.WriteLine("\n***** Removing second sink *****"); c1.Unadvise(myOtherSink); Console.ReadLine(); }