using System; public delegate void LogHandler(string s); public class Process { public void Run(LogHandler lh) { lh("Start process"); //... lh("Stop process"); } } public class Tracer { public void Trace(string s) { System.Console.WriteLine("Tracer: {0}", s); } } public class Test { public static void Log(string s) { System.Console.WriteLine("static Log: {0}", s); } public static int Main(string[] args) { Process p = new Process(); Tracer t = new Tracer(); LogHandler lh = null; // lh = (LogHandler) Delegate.Combine( // lh, // new LogHandler(Log) // ); lh += new LogHandler(Log); // lh = (LogHandler) Delegate.Combine( // lh, // new LogHandler(t.Trace) // ); lh += new LogHandler(t.Trace); p.Run(lh); return 0; } }