public void Register(CountdownWatch watch)
 {
     if (watch == null)
     {
         throw new ArgumentNullException(nameof(watch));
     }
     watch.FinishCountdown += TimerCall;
 }
        static void Main(string[] args)
        {
            CountdownWatch watch = new CountdownWatch();
            Timer          timer = new Timer();
            Alarm          alarm = new Alarm();

            Console.WriteLine("First call");
            watch.StartCount(5);
            Thread.Sleep(6);
            timer.Register(watch);

            Console.WriteLine("\nSecond call");
            watch.StartCount(5);
            Thread.Sleep(6);
            alarm.Register(watch);

            Console.WriteLine("\nThird call");
            watch.StartCount(5);
            Thread.Sleep(6);
            timer.UnRegister(watch);

            Console.WriteLine("\nFourth call");
            watch.StartCount(5);
            Thread.Sleep(6);
            alarm.UnRegister(watch);

            Console.WriteLine("\nFifth call");
            watch.StartCount(5);
            Thread.Sleep(6);
            timer.UnRegister(watch);
            alarm.Register(watch);

            Console.WriteLine("\nSixth call");
            watch.StartCount(5);
            Thread.Sleep(6);
            alarm.UnRegister(watch);
            Console.ReadLine();
        }