tags:

views:

858

answers:

3

Hi, How can I make my own event in C#?

Thanks

+11  A: 

You can declare an event with the following code:

public event EventHandler MyOwnEvent;

A custom delegate type instead of EventHandler can be used if needed.

You can find detailed information/tutorials on the use of events in .net here

Brann
+5  A: 

I have a full discussion of events and delegates in my events article. For the simplest kind of event, you can just declare a public event and the compiler will create both an event and a field to keep track of subscribers:

public event EventHandler Foo;

If you need more complicated subscription/unsubscription logic, you can do that explicitly:

public event EventHandler Foo
{
    add
    {
        // Subscription logic here
    }
    remove
    {
        // Unsubscription logic here
    }
}
Jon Skeet
+2  A: 

Here's an example of creating and using an event with C#

using System;

namespace Event_Example
{
    //First we have to define a delegate that acts as a signature for the
    //function that is ultimately called when the event is triggered.
    //You will notice that the second parameter is of MyEventArgs type.
    //This object will contain information about the triggered event.
    public delegate void MyEventHandler(object source, MyEventArgs e);

    //This is a class which describes the event to the class that recieves it.
    //An EventArgs class must always derive from System.EventArgs.
    public class MyEventArgs : EventArgs
    {
     private string EventInfo;
     public MyEventArgs(string Text)
     {
      EventInfo = Text;
     }
     public string GetInfo()
     {
      return EventInfo;
     }
    }

    //This next class is the one which contains an event and triggers it
    //once an action is performed. For example, lets trigger this event
    //once a variable is incremented over a particular value. Notice the
    //event uses the MyEventHandler delegate to create a signature
    //for the called function.
    public class MyClass
    {
     public event MyEventHandler OnMaximum;
     private int i;
     private int Maximum = 10;
     public int MyValue
     {
      get
      {
       return i;
      }
      set
      {
       if(value <= Maximum)
       {
        i = value;
       }
       else
       {
        //To make sure we only trigger the event if a handler is present
        //we check the event to make sure it's not null.
        if(OnMaximum != null)
        {
         OnMaximum(this, new MyEventArgs("You've entered " +
          value.ToString() +
          ", but the maximum is " +
          Maximum.ToString()));
        }
       }
      }
     }
    }

    class Program
    {
     //This is the actual method that will be assigned to the event handler
     //within the above class. This is where we perform an action once the
     //event has been triggered.
     static void MaximumReached(object source, MyEventArgs e)
     {
      Console.WriteLine(e.GetInfo());
     }

     static void Main(string[] args)
     {
      //Now lets test the event contained in the above class.
      MyClass MyObject = new MyClass();
      MyObject.OnMaximum += new MyEventHandler(MaximumReached);

      for(int x = 0; x <= 15; x++)
      {
       MyObject.MyValue = x;
      }

      Console.ReadLine();
     }
    }
}
Gary Willoughby