65.9K
CodeProject is changing. Read more.
Home

Exploring Action Delegate

starIconstarIconstarIconstarIconstarIcon

5.00/5 (9 votes)

Sep 26, 2010

CPOL

1 min read

viewsIcon

40422

In the last few days, I found a very elegant way to use the delegate...

We used delegate a lot in some or the other way. Like we know, the event base model that we use in Windows as web programming, is based on delegate only. I am in the habit of using delegates often. In the last few days, I found a very elegant way to use the delegate. I was in the habit of using only generic delegates that allows us type safety and a lot more flexibility.

In our traditional programming, we use the delegate as in the following steps:

  1. Declaring the delegate
  2. Creating object of the delegate and assigning it to the appropriate function
  3. Calling the delegate

Let's see the code:

.NET 2.0 introduced one generic delegate Action which takes a single parameter and returns nothing. Its declaration is:

Public delegate void Action<T1>(T1 t1) // Takes 1 parameter and returns nothing

This is a very elegant way to use the delegate.

And C# 3.0 introduced 4 delegates which are as follows:

  1. Public delegate void Action() 	// Takes no parameter and returns nothing 
  2. Public delegate void Action<T1,T2>(T1 t1,T2 t2) 	// Takes 2 parameters 
    						// and returns nothing 
  3. Public delegate void Action<T1,T2,T3>(T1 t1,T2 t2,T3 t3) // Takes 3 parameters 
    						// and returns nothing 
  4. Public delegate void Action<T1,T2,T3,T4>(T1 t1,T2 t2,T3 t3),T4 t4) // Takes 4 
    					// parameters and returns nothing 

Let's see them running.

As from the code, we can also see that Action delegate also provides a method invoke to call the method.

These Action delegates can also be used with Anonymous methods as:

They can also be used with lambda function. Let's see:

So code diligently and efficiently.

Note: The ForEach and ForEach<T> methods each take an Action<T> delegate as a parameter. The method encapsulated by the delegate allows us to perform an action on each element in the array or list.

Happy .NETing….

Cheers,

Brij