// Generic delegates.

using System;

delegate void Test<T> (T t);

class Foo<T>
{
	public event Test<T> MyEvent;

	public void Hello (T t)
	{
		if (MyEvent != null)
			MyEvent (t);
	}
}

class X
{
	static void do_hello (string hello)
	{
		Console.WriteLine ("Hello: {0}", hello);
	}

	public static void Main ()
	{
		Foo<string> foo = new Foo<string> ();
		foo.MyEvent += new Test<string> (do_hello);
		foo.Hello ("Boston");
	}
}