委托与事件 示例
namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Me eventSource = new Me("Learning Hard"); Friend1 obj1 = new Friend1(); Friend2 obj2 = new Friend2(); eventSource.BirthDayEvent += new BirthDayEventHandle(obj1.SendGift); eventSource.BirthDayEvent += new BirthDayEventHandle(obj2.Buycake); eventSource.TimeUp(); Console.Read(); } } public class BirthdayEventArgs : EventArgs { private readonly string name; public string Name { get { return name; } } public BirthdayEventArgs(string name) { this.name = name; } } public delegate void BirthDayEventHandle(object sender, BirthdayEventArgs e); public class Subject { public event BirthDayEventHandle BirthDayEvent; protected virtual void Notify(BirthdayEventArgs e) { BirthDayEventHandle temp = Interlocked.CompareExchange(ref BirthDayEvent, null, null); if(temp != null) { temp(this, e); } } } public class Me : Subject { private string name; public Me(string name) { this.name = name; } public void TimeUp() { BirthdayEventArgs eventarg = new BirthdayEventArgs(name); this.Notify(eventarg); } } // 好友对象 public class Friend1 { public void SendGift(object sender, BirthdayEventArgs e) { Console.WriteLine(e.Name + " 生日到了,我要送礼物"); } } public class Friend2 { public void Buycake(object sender, BirthdayEventArgs e) { Console.WriteLine(e.Name + " 生日到了,我要准备买蛋糕"); } } }