Monday, January 14, 2019

Delegates in C#


Delegates – It is a type that holds the reference of method in an object. It’s also called type safe (It ensure that operation is working on right kind of data) function pointer.
Adv –    Encapsulating the method call from caller
                Effective use of delegate improve the performance
                Use to call method asynchronously.
                Declare Delegate ->Public Delegate int delegate_name(Param optional)
                Multicast Delegate – holds the reference of more than one method. Must contain the methods return void.
How to use
                Single Delegate
 private  delegate void d_Print(string strPrint);
        private delegate int d_Add(int fNum, int sNum);
        static void Main(string[] args)
        {
            //Simple Use of Delegate
            d_Print print = PrintString;
            print("Hello");

            //Pass Delegate as parameter
            PrintHelper(PrintString, "Hello");

            //Delegate With return value
            d_Add add = AddTwoNumbers;
            Console.Write(add(4, 5));
        }
        private static void PrintString(string strPrint)
        {
            Console.Write(strPrint);
        }
        //Pass delegate as parameter
        private static void PrintHelper(d_Print dP, string strPrint)
        {
            dP(strPrint);
        }
        //Add two numbers
        private static int AddTwoNumbers(int num1, int num2)
        return num1 + num2; }
Multicast Delegate
 private delegate int d_ArithmeticOpr(int fNum, int sNum);
        static void Main(string[] args)
        {
            //Use of multicast Delegate
            d_ArithmeticOpr math = new d_ArithmeticOpr(AddTwoNumbers);
            //Add Subtract Method to delegate object
            math += new d_ArithmeticOpr(SubtractNumber);
            //This call will do both Addition and Subtraction
            Console.Write(math(20, 10));

            //remove Add call from delegate
            math -= new d_ArithmeticOpr(AddTwoNumbers);
            //This call only do the Subtraction
            Console.Write(math(20, 10));
        }
        //Subtract Two Numbers
        private static int SubtractNumber(int num1, int num2)
        {
            return (num1-num2);
        }
        //Add two numbers
        private static int AddTwoNumbers(int num1, int num2)
        return num1 + num2; }

No comments: