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.
