using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace EventClock { public class ClassWithDelegate { //封装了一个返回值为int的多重委托方法 public delegate int DelegateThatReturns(); public DelegateThatReturns theDelegate; public void Run() { for (; ; ) { Thread.Sleep(500); if (theDelegate != null) { //显式调用每个委托方法 foreach (DelegateThatReturns del in theDelegate.GetInvocationList()) { int result = del(); Console.WriteLine("Delegates fired! return result: {0}",result); } Console.WriteLine(); } } } } public class FirstSubscribe { private int myCounter = 0; public void Subscribe(ClassWithDelegate theClassWithDelegate) { theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturns(DisplayCounter); } public int DisplayCounter() { return ++myCounter; } } public class SecondSubscribe { private int myCounter = 0; public void Subscribe(ClassWithDelegate theClassWithDelegate) { theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturns(Doubler); } public int Doubler() { return myCounter += 2; } } class Program { static void Main(string[] args) { ClassWithDelegate theClassWithDelegate = new ClassWithDelegate(); FirstSubscribe fs = new FirstSubscribe(); fs.Subscribe(theClassWithDelegate); SecondSubscribe ss = new SecondSubscribe(); ss.Subscribe(theClassWithDelegate); theClassWithDelegate.Run(); Console.ReadLine(); } } }