using System; class Test{ public static void Main(){ new Test().F(); } event EventHandler ev1; EventHandler ev2; void F(){ ev1 += Handler1; ev1 += Handler2; ev1 += Handler3; try{ev1(null,null);}catch(Exception ex){Console.WriteLine("catch["+ex.Message+"]");} ev2 = chain(ev2, Handler1); ev2 = chain(ev2, Handler2); ev2 = chain(ev2, Handler3); try{ev2(null,null);}catch(Exception ex){Console.WriteLine("catch["+ex.Message+"]");} } static EventHandler chain(EventHandler a, EventHandler b){ return (Object sender, EventArgs e) => {if(a!=null){a(sender, e);} if(b!=null){b(sender, e);}}; } static void Handler1(Object sender, EventArgs e){ Console.WriteLine("1"); } static void Handler2(Object sender, EventArgs e){ Console.WriteLine("2"); throw new Exception("ex2"); } static void Handler3(Object sender, EventArgs e){ Console.WriteLine("3"); } }