using System;

namespace TestDelegate2
{
    static class Util
    {
        public delegate int NextFunction();

        public static void printNext(NextFunction next)
        {
            Console.WriteLine(next());
        }
    }


    class DelegateTest
    {
        private int counter = 1;

        public int next()
        {
            return counter++;
        }
    }

    class TestDelegate2
    {
        static void Main(string[] args)
        {
            DelegateTest d = new DelegateTest();
            DelegateTest d2 = new DelegateTest();

            Util.printNext(new Util.NextFunction(d.next));
            Util.printNext(new Util.NextFunction(d.next));
            Util.printNext(new Util.NextFunction(d2.next));
            Util.printNext(new Util.NextFunction(d2.next));
            Util.printNext(new Util.NextFunction(d.next));
            Console.ReadKey();
        }
    }
}