What is Delegates and Events in C#.Net


This tutorial describes some basics about some of the additional features of C# language namely Delegates and Events. These new constructs are used in object-oriented programming languages like C# and Java.

Delegates in C# .Net:

In languages like C/C++ there is a feature called callback function. This feature uses Pointers to Functions to pass them as parameters to other functions . Delegate is a similar feature but it is more safe and possible to use in object-oriented constructions of programming language. It needs the method’s name and its parameters (input and output variables) when we create a delegate. But delegate is not a standalone construction it’s a class. Any delegate must be inherited from base delegate class of .NET class library. This is class called System.MultycastDelegate. So, now please have a look at the following example:


class Figure
{

public Figure(float a, float b, float c)
{
m_xPos = a;
m_yPos = b;
m_zPos = c;
}

public void InvertX()
{
m_xPos = – m_xPos;
}
public void InvertY()
{
m_yPos = – m_yPos;
}
public void InvertZ()
{
m_zPos = – m_zPos;
}

private float m_xPos = 0;
private float m_yPos = 0;
private float m_zPos = 0;

}


Now, we have a class named Figure and it has three private fields that use to store position and three methods to invert this position by every axis. In main class we declare delegate in the next way:

public delegate void FigureDelegate();

And now in the main function we should use it like this:


Figure figure = new Figure(10,20,30);

FigureDelegate fx = new FigureDelegate(figure.InvertX);
FigureDelegate fy = new FigureDelegate(figure.InvertY);
FigureDelegate fz = new FigureDelegate(figure.InvertZ);

MulticastDelegate f_del = fx+fy+fz;


In this example we create three delegates of FigureDelegate type and attach to these elements our three methods from Figure class. Now every delegate keeps the address of the attached function. The last line of code is very interesting, here we create a delegate of base type (MulyCastDelegate) and attach three of our already created delegates. It is an allowed construction because every delegate inherited from base type can keep more than one pointer to function. Since, it can contain a list of addresses to methods.

Events in C# .Net:

Delegate is a very useful construct in C# language as it can define and use function names at runtime not at compile time. But the main goal of using delegates is using them into events model. Events are the actions of the system on user manipulations (e.g. mouse clicks, key press, timer etc.). To understand the usage of delegates for event model, the previous examples are used here. We should add to our Figure class next things:


public delegate void FigureHandler(string msg);

public static event FigureHandler Inverted;

public void InvertZ()
{
m_zPos = – m_zPos;
Inverted(“inverted by z-axis”);
}


Now we have a delegate declared and event that uses this delegate’s type. In every function we should call our event. It is not yet very clear why we should use such construction, but the next code snippet should explain it clearly:


static void Main(string[] args)
{

Figure figure = new Figure(10,20,30);

Figure.Inverted+=new Test.Figure.FigureHandler(OnFigureInverted);

figure.InvertX();

figure.InvertZ();

}

private static void OnFigureInverted(string msg)
{
Console.WriteLine(“Figure was {0}”,msg);
}


So, in the main function we should create an object of figure class and attach event handler to the method OnFigureInverted. And when we call any of invert methods the event is fired and it calls our event handler. The application will print the following string into the console:

Figure was inverted by x-axis
Figure was inverted by z-axis

There was simple examples of using delegates and events and should be treated as a starting point to learn it more yourself.

Advertisements

Thanks a lot for visiting this site .. Please leave a Comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s