ARTICLE

Learning Delegates in C#, an Introduction

Posted by Matthew Cochran Articles | Visual C# January 03, 2006
There is this thing in C# called a delegate, which is going to be crucial to build interactions between our objects. What’s a delegate, you ask? Good question. A delegate is a pointer to a method. What’s that mean? Just like you can pass variable by reference, you can pass a reference to a method. Let me give you an example.
Reader Level:
Download Files:
 

There is this thing in C# called a delegate, which is going to be crucial to build interactions between our objects. What's a delegate, you ask?  Good question.  A delegate is a pointer to a method.  What's that mean?  Just like you can pass 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.
 
Happy coding,

Login to add your contents and source code to this article
post comment
     

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

Posted by Clayton Courtney Dec 09, 2009

Cochran could you please list all the advantage of delegates?

Posted by Raja Sep 25, 2008

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 induteja@gmail.com. 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();

Posted by induteja aligeti Aug 08, 2007

delegates are not part of classes and therefor are placed outside any class: namespace DelegateExample { public delegate int MyMethodDelegate(int param1, int param2); public class MyObject { public int Add(int param1, int param2) { return param1 + param2; } public int Multiply(int param1, int param2) { return param1 * param2; } } }

Posted by Simon Jun 12, 2007

How come this made it to the frontpage? Was something changed, as far as i can see this was originally posted Jan. 3rd 2006

Posted by Simon Jun 12, 2007
COMMENT USING
PREMIUM SPONSORS
Over-C is a holistic consortium of communications and technology specialists. We build, deploy and market both business as well as consumer products and solutions.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.
Get Career Advice from Experts