Jitesh Byahut 5/21/2014 3394

Delegates In C#

Delegates can be used to hold the reference of method. A delegate is a type that safety encapsulates a method and it is similar to function pointer in C and C++. Delegates can be used to define call back methods. Delegate class hold only those methods which have same signature. It allow methods to be passed as parameters. A delegate can be seen as a placeholder for method.

Delegates can be chained multiple methods together and can be called on a single event.

Suppose if you have multiple methods with same signature which have same return type & number of parameters and want to call all the methods with single object then we can go for delegates.

Creating and using delegates involve the four steps:

1. Declaring a delegates

2. Defining a delegate method

3. Creating delegate object

4. Invoking delegate object

    class Program

    {

        // Step-1. Declaring a delegates

        // Access modifier - delegate keyword - return type - delegate-name

        public delegate void Calculate(int a, int b);

 

        // Step-2. Defining a delegate method

        // Signature of method exactly matches the delegate signature.

        public static void Add(int x, int y)

        {

            Console.WriteLine("Sum = {0}", x + y);

        }

 

        static void Main(string[] args)

        {

            // Step-3. Creating delegate object

            Calculate calculate = new Calculate(Add);

            // Step-4. Invoking delegate object

            calculate(5, 5);

            Console.ReadKey();

        }

       

    }

You can also assign any method to delegates like :

// Step-3. Creating delegate object

  Calculate calculate = Add;

Types of Delegates


1. Single cast delegate

Delegate that represent only a single method is known as Single Cast Delegate.

    class Program

    {

        //  Declaring a delegates

       

        public delegate void Calculate(int a, int b);

 

        // Defining a delegate method

       

        public static void Add(int x, int y)

        {

            Console.WriteLine("Sum = {0}", x + y);

        }

 

        static void Main(string[] args)

        {

            // Creating delegate object

            Calculate calculate = new Calculate(Add);

            // Invoking delegate object

            calculate(5, 5);

            Console.ReadKey();

        }

       

    }

2. Multi Cast Delegate

Delegate that represent more than one method is known as Multi Cast Delegate.

Use += operator to add reference of more method to delegate

Use -= operator to remove reference of a method

    class Program

    {

        // Declaring a delegates       

        public delegate void Calculate(int a, int b);

 

        // Defining a delegate method       

        public static void Add(int x, int y)

        {

            Console.WriteLine("Sum = {0}", x + y);

        }

 

        // Defining second delegate method

        public static void Multiply(int x, int y)

        {

            Console.WriteLine("Multiply = {0}", x + y);

        }

  

        static void Main(string[] args)

        {

            // Creating delegate object

            Calculate calculate = new Calculate(Add);

            // Add second method to delegate

            calculate += Multiply;

 

            // Invoking delegate object, it will call Add and Multiply both method

            calculate(5, 5);

 

            Console.ReadKey();

        }
   }

You can also create separate delegate object for each method and combine all objects to a single to perform Multicast delegate.

   // Alternate way of creating Multicast delegate object

   Calculate delegate1 = Add;

   Calculate delegate2 = Multiply;

   Calculate calculate = delegate1 + delegate2;

Remove reference of a method from Multicast delegate object.

        static void Main(string[] args)

        {

            //Creating delegate object

            Calculate calculate = new Calculate(Add);

            // add second method to delegate

            calculate += Multiply;

 

            // Remove reference of Add method to delegate

            calculate -= Add;

            // Invoking delegate object, it will call only Multiply method

            calculate(5, 5);

 

            Console.ReadKey();

        }

 

        // Output

        // Multiply = 10


Please give your feedback for improving this page