C# – Events

Events are certain actions that happen during the execution of a program that the applications wishes to be notified about , so it can respond. An event can be a mouse click , a keystroke or the coming of a certain time ( alarm) . An event is basically a message which is said to be fired or triggered when the respective action occurs. A class that raises an event is called an ‘ event sender’ , a class that receives an event is called and ‘ event consumer’ and a method which is used to handle a particular event is called an ‘ even handler’.

Event Handling in C#

In .Net, events are implements as multicast delegates. In C# events are a first class ( basic ) language construct , and are defined using the event keyword. The steps for implementing events and event handling are :

  1. Define a public delegate for the event outside any class boundary. The conventional signature of a delegate for an event is :

public void EventDelegate ( object sender, EventArgs e)

2. Define a class to generate or raise the event. Define a public event in the class using the event keyword and the public delegate :

public event EventDelegate MyEvent

write some logic to raise the event . when raising an event , the first argument is usually the sender or originator of the event . The second argument is a sub- type of system. EvenArgs , which holds any additional data to be passed to the event handler.

class SomeEventArgs : EventArgs

{

}

An event is generally raised like this :

SomeEventArgs someData = new SomeEventArgs ( /* some necessary arguments */ );

Or if no data needs to be sent, the event is raised like this:

MyEvent ( this, null );

3. Defin e a class to receive the events. This class is usually the main application class containing the Main ( ) method Write an event handler method in the class. The signature of the event handler must be identical to that of the public delegate created in step 1 . The name of the event handler method conventionally starts with the word ” On “, e.g.

public void OnMyEvent ( object Sender , EventArgs e )

{

// handle the event

}

Instantiate the event generator class created in step 2 like this :

EventClass eventObj = new EventClass ( );

Add the event handler written in the current class to the event generator class ‘ event.

eventObj . MyEvent += new EventDelegate ( OnMyEvent);

Now the event handler ‘ OnMyEvent ( )’ will be called automatically whenever the event ‘ MyEvent ‘ is triggered.

Multiple events

Since events are implemented as multicast delegates in C#, we can subscribe multiple event handlers to a single event. For example, consider this revised Test class :

class Test

{

static void Main ( )

{

clockTimer clockTimer = new clockTimer ( );

clockTimer.Timer += new TimerEvent ( OnClockTick);

clockTimer.Timer += new TimerEvent ( OnClockTick2);

clockTimer.start ( );

}

public static void OnClockTick ( object sender, EventArgs e )

{

Console.WriteLine (” Received a clock tick event !”);

}

public static void OnClockTick2 ( object sender, EventArgs e)

{

Console.WriteLine (” Received a clock tick event in OnClockTick2 !”);

}

}

Leave a Reply

Your email address will not be published. Required fields are marked *