Saturday, February 3, 2018

Delegates with Named Method vs Anonymous Method vs Lambda Expressions

I'm feeling nostalgic...


Named Method

class Program
    {
        delegate int PerformCalculation(int x, int y);

        public static int Add(int x, int y)
        {
            return x + y;
        }

        public static int Multiply(int x, int y)
        {
            return x * y;
        }

        static void Main(string[] args)
        {
            int x = 2;
            int y = 3;
            DelegatesWithNamedMethods(x, y);
        }

        private static void DelegatesWithNamedMethods(int x, int y)
        {
            var adding = new PerformCalculation(Add);
            var multiplying = new PerformCalculation(Multiply);
            Console.WriteLine("Delegates with named methods");
            Console.WriteLine($"{x} + {y} = {adding(x, y)}");
            Console.WriteLine($"{x} * {y} = {multiplying(x, y)}");
        }
    }

Anonymous Method

class Program
    {
        delegate int PerformCalculation(int x, int y);

        static void Main(string[] args)
        {
            int x = 2;
            int y = 3;
            DelegatesWithAnonymousMethods(x, y);
        }

        private static void DelegatesWithAnonymousMethods(int x, int y)
        {
            var adding = new PerformCalculation(delegate(int one, int two)
            {
                return one + two;
            });

            var multiplying = new PerformCalculation(delegate(int one, int two)
            {
                return one * two;
            });

            Console.WriteLine("Delegates with anonymous methods");
            Console.WriteLine($"{x} + {y} = {adding(x, y)}");
            Console.WriteLine($"{x} * {y} = {multiplying(x, y)}");
        }
    }

Lambda Expression

class Program
    {
        delegate int PerformCalculation(int x, int y);

        static void Main(string[] args)
        {
            int x = 2;
            int y = 3;
            DelegatesWithLambdaExpressions(x, y);
        }

        private static void DelegatesWithLambdaExpressions(int x, int y)
        {
            var adding = new PerformCalculation((one, two) => one + two);
            var multiplying = new PerformCalculation((one, two) => one * two);

            Console.WriteLine("Delegates with lambda expressions");
            Console.WriteLine($"{x} + {y} = {adding(x, y)}");
            Console.WriteLine($"{x} * {y} = {multiplying(x, y)}");
        }
    }