using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication34 { class Program { static void Main(string[] args) { Heater h = new Heater(); alertM a = new alertM(); h.BoilEvent += a.AM; h.Boiled(); Console.ReadLine(); } } public delegate void BoilHandler(object sender,BoilEventArgs e); public class Heater { public int temperature; public event BoilHandler BoilEvent; public void Boiled() { for (int i = 0; i <= 100; i++) { temperature = i; if (temperature > 95) { BoilEvent(this, new BoilEventArgs(temperature)); Thread.Sleep(2000); } } } } public class alertM { public void AM(object sender,BoilEventArgs e) { Console.WriteLine("水马上就要开了"+e.temperature); } } public class BoilEventArgs : EventArgs { public int temperature; public BoilEventArgs(int param) { temperature = param; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication35 { class Program { static void Main(string[] args) { List<User> list1 = new List<User>(); User u1 = new User("Daniel"); User u2 = new User("Acadia"); User u3 = new User("Johnes"); list1.Add(new User("Daniel")); list1.Add(u2); list1.Add(u3); ChangeName cn = new ChangeName(list1); cn.RenameEvent += cn.RE; cn.Rename("testtest", 2); Console.ReadLine(); } } public class User { public string Name; public User(string name) { Name = name; } } public class ChangeName { List<User> listuser; public delegate void RenameHandler(object sender, RenameEventArgs e); public event RenameHandler RenameEvent; public ChangeName(List<User> list) { listuser = list; } public void Rename(string NewName,int i) { if (i < listuser.Count && i>0) { string OldName = listuser[i].Name; listuser[i].Name = NewName; RenameEvent(this, new RenameEventArgs(OldName,NewName,i)); } } public void RE(object sender,RenameEventArgs e) { Console.WriteLine("第" + e.Order+"项,用户名称已经由" + e.OldName + "改为了 " + e.NewName); } } public class RenameEventArgs : EventArgs { public string NewName; public string OldName; public int Order; public RenameEventArgs(string Oldparam,string Newparam,int i) { OldName = Oldparam; NewName = Newparam; Order = i; } } }
备注:事件委托要放在事件发生的前面,如下:
h.BoilEvent += a.AM;
h.Boiled();
参考链接:
关于事件和委托,这篇写的太好了:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html#undefined
http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html