using System; public class Events { public delegate void MyAction(); public event MyAction OriginalEvent = delegate { }; public event Action DelegatingEvent { add { OriginalEvent += new MyAction(value); } remove { OriginalEvent -= new MyAction(value); } } public void FireOriginalEvent() { OriginalEvent(); } } public class Test { private static void PrintFoo() { Console.WriteLine("Foo"); } public static void Main() { Console.WriteLine("Testing original event:"); Events events1 = new Events(); events1.OriginalEvent += PrintFoo; events1.OriginalEvent -= PrintFoo; events1.FireOriginalEvent(); Console.WriteLine("Testing delegating event:"); Events events2 = new Events(); events2.DelegatingEvent += PrintFoo; events2.DelegatingEvent -= PrintFoo; // Doesn't actually remove anything! events2.FireOriginalEvent(); Console.WriteLine("However, THIS works:"); Events events3 = new Events(); Action printFooAction = PrintFoo; events3.DelegatingEvent += printFooAction; events3.DelegatingEvent -= printFooAction; events3.FireOriginalEvent(); } }