/* Example code from Chapter 18 - Generics C# 2.0: The Complete Reference, Second Edition by Herbert Schildt McGraw-Hill/Osborne ? 2006 */ using System; class MyEventArgs : EventArgs { public int eventnum; } delegate void MyEventHandler<T, V>(T source, V args); class MyEvent { static int count = 0; public event MyEventHandler<MyEvent, MyEventArgs> SomeEvent; public void OnSomeEvent() { MyEventArgs arg = new MyEventArgs(); if(SomeEvent != null) { arg.eventnum = count++; SomeEvent(this, arg); } } } class X { public void handler<T, V>(T source, V arg) where V : MyEventArgs { Console.WriteLine("Event " + arg.eventnum + " received by an X object."); Console.WriteLine("Source is " + source); Console.WriteLine(); } } class Y { public void handler<T,V>(T source, V arg) where V : MyEventArgs { Console.WriteLine("Event " + arg.eventnum + " received by a Y object."); Console.WriteLine("Source is " + source); Console.WriteLine(); } } class Test { public static void Main() { X ob1 = new X(); Y ob2 = new Y(); MyEvent evt = new MyEvent(); evt.SomeEvent += ob1.handler; evt.SomeEvent += ob2.handler; evt.OnSomeEvent(); evt.OnSomeEvent(); } }