A Journey to Lambda : Part 2

So as of now we all know that it all started from the Delegates. But Delegates was just the first step, Microsoft had taken. The Next step was ....

Part 1 : Anonymous Methods

So what is anonymous Method, Well if i ask a student who had not prepared his homework on anonymous methods he might say 
Anonymous Methods are methods which does not have any name
And the strange thing is that, it is the right answer. They don't have any name. As of last Article you know that i can assign any method to the Delegate instance 

      del handler = fun;

and when execute the delegate by calling handler(). it will execute the fun().

But let's suppose, if I say that I can execute the delegate without assigning it to a method. So the fun function which was defined as 

       public static void fun(string message)
       {
           Console.WriteLine(message);
       }

and assigned previously as 

                          del handler = fun;

are now replaced with this code

      del handler = delegate(string message)
      {
          Console.WriteLine(message);
      };

and then if the code called in the same manner as previously. 

                        handler("Hello World");

code will produce similar output
 

So we can see that it is quite easy to implement. as we don't need method name. Complete Solution code will look like that

    class Program
    {
       public delegate void del(string msg);
        static void Main(string[] args)
        {
               del handler = delegate(string message)
               {
                  Console.WriteLine(message);
               };

            handler("Hello World");
            Console.ReadKey();
        }
     }

Part 2 : Func<T, TResult> and Action <T>


Delegates have special types as well. Let's Dive into those special ones. In the above Scenario i had defined the delegate and assign the method or anonymous method to it as 

    a)   public delegate void del(string msg); 

    b)   del handler = delegate(string message) {
            Console.WriteLine(message);
          };

                 or 

                del handler = fun;

where fun is the method name. So clearly we have encapsulated the method (anonymous or defined) in the delegate into our defined delegate. But you can use a Special Delegate which can encapsulate the method without explicitly declaring your delegate so can totally avoid  part    a).

This Special Delegate is Action<T>  just like (T represent for Type we can put any data type here, it represent what type of Parameter it accept in this case it is string as <string> is written in those angular braces.You can use your classes as well for T. Both Action <T> and Func<T> are contravariant, So we can also use the types which either are specified or are less derived.)
         
            Action<string> handler = delegate(string message)
            {
                Console.WriteLine(message);
            };

Well you can see that i have included delegate declaration and instance creation simultaneously.  and if we run the method we will see the same output which was produced earlier.

Why Action<T> if you have noticed the subtitle of the Section I had write down Func<T> and Action <T>  so why, well this is a secret... just kidding, well if we look at our delegate signature of our method or previous delegate we can easily say it was void type of delegate. Mean it does not return any value. So when we don't return any value we use Action<T> and when we return a value we use Func<T>

Now Let's see a Func<T> Example.

      Func<int, int, int> handler2 = delegate(int x, int y)
      {
                    return x + y;
      };

By checking Action<T> we can easily say that in <int, int, int> there are three parameters which have been passed. but if we see the delegate definition we only see two parameter. The third one is the return type of the delegate as we have already told that Func<T, TResult> return value on the other hand Action<T> don't return any value.  so we need a place where we can define what is the type of the value returned and it has been decided that it will be the last place of Func<T, TResult>. so in nutshell last parameter is the return type. Now the complete code is as following.
 

   class Program
    {
       public delegate void del(string msg);
        static void Main(string[] args)
        {
               del handler = delegate(string message)
               {
                  Console.WriteLine(message);
               };


               Func<int, int,int> handler2 = delegate(int x, int y)
               {
                   return x + y;
               };

                    handler("Hello World");
              Console.WriteLine("5 + 10 = " + handler2(5, 10));
               Console.ReadKey();
        }
     }

and the Output is.


Well i hope you enjoy this session. 
 

Our story will remain continue till the next part till then au revoir.



Next
This is the most recent post.
Previous
Older Post

1 comments:

Rate me

Free Rating Code
 
Top
How to Become Author of TechFusion || write your suggestion and idea on comment box, we try to implement it.