Introduction
There is this thing in C# called a delegate, which is going to be crucial to build interactions between our objects.
What is a delegate in C#?
A delegate is a pointer to a method. What does that mean? Just like you can pass a variable by reference, you can pass a reference to a method. Let me give you an example.
Let's say we have a class with two methods that have the same signature (same return type and same parameter configuration).
public class MyObject
{
public int Add(int param1, int param2)
{
return param1 + param2;
}
public int Multiply(int param1, int param2)
{
return param1 * param2;
}
}
We can point to either of the methods in our class by using a delegate declared as follows.
public delegate int MyMethodDelegate(int param1, int param2);
Now, if we have another class and want to execute either of the methods in MyObject, we can do it through the delegate as in the "Do()" method in the class below As a matter of fact, we can pass any method with the same signature (not JUST the methods in MyObject). Check out the MySecondObject.Subtract() method.
public class MySecondObject
{
MyObject obj;
int a, b;
public MySecondObject()
{
a = 4;
b = 5;
obj = new MyObject();
}
public int Do(string pMethod)
{
MyMethodDelegate del = null;
switch (pMethod)
{
case "Add":
del = new MyMethodDelegate(obj.Add);
break;
case "Multiply":
del = new MyMethodDelegate(obj.Multiply);
break;
case "Subtract":
del = new MyMethodDelegate(this.Subtract);
break;
}
if (null == del)
throw new Exception("Not a valid call");
return del(a, b);
}
public int Subtract(int param1, int param2)
{
return param1 - param2;
}
}
Hopefully, this gives you a better idea of what delegates are and how they are implemented.
Clayton CourtneyPosted Dec 9, 2009, 12:23 PM
Matthew, While the example shows how they are implemented but it does not show why they would be used. In the Delegate example you could have simply called the method's directly without having all of the overhead of the delagate. I understand there is a reason for them I just do not know what it is from this example. Clayton
RajaPosted Sep 25, 2008, 7:35 AM
Cochran could you please list all the advantage of delegates?
induteja aligetiPosted Aug 8, 2007, 12:22 PM
Hi Matthew, This article is awesome.... It gives a good idea on delegates. Thank you. i am struck up with a prog..to populate data to combo box form sql server. can u please help me. here is the main code i wrote bu unabel to fetch data from db. can u please format it and mail to [email protected]. string s; SqlConnection con = new SqlConnection(); con.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=test;server=noc-002;Connect Timeout=30"; con.Open(); SqlCommand com; s = "select [name] from noc-002.dbo.test.August2007"; /// com = new SqlCommand(s, con); /// comboBox1.Items.Add(s.IndexOf[0]); MessageBox.Show(s); /// com.ExeuteNonQuery(); /// MessageBox.Show("Records are selected"); con.Close();
SimonPosted Jun 12, 2007, 1:07 PM
How come this made it to the frontpage? Was something changed, as far as i can see this was originally posted Jan. 3rd 2006
SusanPosted Jun 12, 2007, 11:10 AM
The line public delegate int MyMethodDelegate(int param1, int param2); ...appears in isolation. Does it belong in MySecondObject?
Jason CarterPosted Jan 31, 2007, 12:07 AM
I like this article, but I really can't find a real world situation for using them. Can someone tell me a good situation to use them.