例子:变色龙随着环境温度变化,改变自身颜色。
事件:环境的温度改变,所以应该有一个环境类,定义环境改变事件,并定义触发事件的方法;
事件处理:变色龙根据温度,判断自身颜色变化,所以变色龙类有根据环境温度改变颜色的事件处理方法。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EventHandler { //1.自定义事件参数,若没有参数,可以省略这一步 public class ChangeEnvironmentEventArg : EventArgs { int temperature; public ChangeEnvironmentEventArg(int temperature) { this.temperature = temperature; } public int Temperature { get { return temperature; } } } public class Environment { //2/定义事件委托 public delegate void ChangeEnvironmentEventHandler(object sender, ChangeEnvironmentEventArg eventArg); //4.定义事件 public event ChangeEnvironmentEventHandler changeEnvironment; //4.触发事件 public void OnChangeEnvironment(int t) { if(changeEnvironment != null) changeEnvironment(this , new ChangeEnvironmentEventArg(t)); } } class Chameleon { string color = "green"; string name; public Chameleon(string name) { this.name = name; } //5.自定义事件处理 //变色龙,随着环境变化,改变颜色 public void ChangeColor(object sender, ChangeEnvironmentEventArg eventArg) { if (eventArg.Temperature < 30) { color = "green"; } else if(eventArg.Temperature > 50) { color = "orange"; }else{ color = "red"; } Console.WriteLine("{0}:The Envirment temperature is {1}, i am changing color to {2}",name,eventArg.Temperature,color); } public string Color { get { return color; } } public void printColor() { Console.WriteLine("{0}'s color is {1} ",name, color); } } class Program { static void Main(string[] args) { Chameleon chameleon1 = new Chameleon("chameleon1"); Chameleon chameleon2 = new Chameleon("chameleon2"); Environment environment = new Environment(); //6.订阅事件 environment.changeEnvironment += chameleon1.ChangeColor; environment.OnChangeEnvironment(60); //触发事件 chameleon1.printColor(); chameleon2.printColor(); Console.ReadKey(); } } }只有变色龙1订阅了环境改变事件,所以只有他可以根据温度改变颜色。如何让所有的变色龙都对环境温度敏感,做出反应呢?
可以声明事件为static event,在变色龙构造函数中,订阅事件,就可以让每个变色龙都订阅环境改变事件了。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EventHandler { //1.自定义事件参数 public class ChangeEnvironmentEventArg : EventArgs { int temperature; public ChangeEnvironmentEventArg(int temperature) { this.temperature = temperature; } public int Temperature { get { return temperature; } } } public class Environment { //2/定义事件委托 public delegate void ChangeEnvironmentEventHandler(object sender, ChangeEnvironmentEventArg eventArg); //4.定义事件 public static event ChangeEnvironmentEventHandler changeEnvironment; //4.触发事件 public void OnChangeEnvironment(int t) { if(changeEnvironment != null) changeEnvironment(this , new ChangeEnvironmentEventArg(t)); } } class Chameleon { string color = "green"; string name; public Chameleon(string name) { this.name = name; //6.订阅事件 Environment.changeEnvironment += this.ChangeColor; } //5.自定义事件处理 //变色龙,随着环境变化,改变颜色 public void ChangeColor(object sender, ChangeEnvironmentEventArg eventArg) { if (eventArg.Temperature < 30) { color = "green"; } else if(eventArg.Temperature > 50) { color = "orange"; }else{ color = "red"; } Console.WriteLine("{0}:The Envirment temperature is {1}, i am changing color to {2}",name,eventArg.Temperature,color); } public string Color { get { return color; } } public void printColor() { Console.WriteLine("{0}'s color is {1} ",name, color); } } class Program { static void Main(string[] args) { Chameleon chameleon1 = new Chameleon("chameleon1"); Chameleon chameleon2 = new Chameleon("chameleon2"); Environment environment = new Environment(); environment.OnChangeEnvironment(60); //触发事件 chameleon1.printColor(); chameleon2.printColor(); Console.ReadKey(); } } }