Nested events in C# | Delegate calling another Delegate Sample


Program

using System;
using System.Threading;

namespace DelegatesAndEvents
{
    class EventExample02
    {
        delegate void MyDelFillorDrain();

        event MyDelFillorDrain MyEvent;

        public void FillTheTank()
        {
            Console.WriteLine("Water Level increasing");
            for(int i=1000;i<=5000;i=i+1000)
            {
                Console.WriteLine(i + " Litres");
                Thread.Sleep(500);
                if (i == 5000)
                {
                    this.MyEvent = new MyDelFillorDrain(DrainTheTank);
                    Console.WriteLine("Open valve to distribute");
                }
            }
        }

        public void DrainTheTank()
        {
            Console.WriteLine("Water Level decreasing");
            for (int i = 5000; i >= 0; i = i - 1000)
            {
                Console.WriteLine(i + " Litres");
                Thread.Sleep(500);
                if(i==0)
                {
                    this.MyEvent = new MyDelFillorDrain(FillTheTank);
                    Console.WriteLine("Start motor to fill water");
                }
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Water tank model");
           
            EventExample02 obj1 = new EventExample02();
            obj1.MyEvent = new MyDelFillorDrain(obj1.FillTheTank);

            int Operations = 0;
            while (Operations < 4)
            {
                Operations++;
                obj1.MyEvent();
            }
            Console.ReadKey();
        }
    }
}

Output

Water tank model
Water Level increasing
1000 Litres
2000 Litres
3000 Litres
4000 Litres
5000 Litres
Open valve to distribute
Water Level decreasing
5000 Litres
4000 Litres
3000 Litres
2000 Litres
1000 Litres
0Litres
Start motor to fill water
Water Level increasing
1000 Litres
2000 Litres
3000 Litres
4000 Litres
5000 Litres
Open valve to distribute
Water Level decreasing
5000 Litres
4000 Litres
3000 Litres
2000 Litres
1000 Litres
0Litres
Start motor to fill water

No comments:

Post a Comment