Posted by: Nishant Rana | July 24, 2008

Delegate, Anonymous Methods and Lambda Expressions in C#

Delegate acts as a function pointer.

We define the function to which the delegate can point to in this manner

// Delegate which will point to a method which has no parameter and returns nothing

public delegate void MySimpleDelegate();

// Delegate which will point to a method which takes string as parameter and returns string as well

public delegate string MyComplexDelegate(string message);

 

Now comes our two function to which delegates would be pointing 

public void SimpleDelegate(){

MessageBox.Show(“My Simple Delegate”);

}  

public string ComplexDelegate(string name){

MessageBox.Show(name);

return “Hi “ + name;

} 

// We have created an instance of our MySimpleDelegate

// which would be referencing SimpleDelegate function

MySimpleDelegate myD = SimpleDelegate;

// when we call the delegate it calls the method which it is pointing to

myD();

// Same thing with our MyComplexDelegate

MyComplexDelegate myAD = AnotherDelegate;

myAD(“Hello”);

 

// If we know that our function SimpleDelegate() and ComplexDelegate(string name)

// wouldn’t be called by any other code other than the delegate itself we can

// make use of anonymous method i.e. method with no name

// Here again we have done the same thing but used anonymous method

// because we aren’t going to use it anywhere else

MySimpleDelegate myD = delegate

{

MessageBox.Show(“Simple Delegate”);

};

myD();

MyComplexDelegate myAD = delegate(String name)

{

MessageBox.Show(name);

return “Hi “ + name;

};

myAD(“Hello”);

// Now let’s shorten our code further using lambda expression

// () -> no input parameter

// => -> lambda operator

// MessageBox.Show(“Simple delegate”) -> statement block

MySimpleDelegate myD = () => MessageBox.Show(“Simple delegate”);

myD();

//(String name) -> explicitly typed parameter

MyComplexDelegate myAD = (String name) => { MessageBox.Show(name); return name; };

myAD(“Hello”);

 

Bye.

 


Leave a response

Your response:

Categories