Code to write this article I have stolen from here.

Code looks like this: 

  class Program
  {
    static void Main(string[] args)
    {
      MyEvents me = new MyEvents();
      Listener l = new Listener();
      l.Subscribe(me);
      me.Start();
    }
  }

  public class MyEvents
  {
    public event MyEventHandler MyEvent;
    public EventArgs e = null;
    public delegate void MyEventHandler(object sender, EventArgs e);

    public void Start()
    {
      while (true)
      {
        System.Threading.Thread.Sleep(3000);
        if (MyEvent != null)
        {
          MyEvent(this, e);
        }
      }
    }
  }

  public class Listener
  {
    public EventArgs e = null;
    public void Subscribe(MyEvents m)
    {
      m.MyEvent += new MyEvents.MyEventHandler(HeardIt);
    }

    private void HeardIt(object sender, EventArgs e)
    {
      System.Console.WriteLine("Test");
    }
  }

Now, lets try to analyze it part by part.

If we start from beginning, you will see code like: 

static void Main(string[] args)
{
	MyEvents me = new MyEvents();
	Listener l = new Listener();
	l.Subscribe(me);
	me.Start();
}

Then in events class notice that we had to define delegate like:

public delegate void MyEventHandler(object sender, EventArgs e);

Our event will then use delegate like:

public event MyEventHandler MyEvent;

And we called our event (delegate) method like:

MyEvent(this, e);

In this moment application still has no idea about MyEvents implementation.

We have to define "Listener" which will listen our event, and with that, we will actually implement our delegate.

First we have to "subscribe" to an event, like:

m.MyEvent += new MyEvents.MyEventHandler(HeardIt);

And finally implementation:

private void HeardIt(object sender, EventArgs e)
{
	System.Console.WriteLine("Test");
}

Example project you can download from here.