2021-7-28 事件的基本练习
事件和委托的关系相当于属性和字段的关系,事件可以说是特殊的委托,下面是事件的简单练习1

using System; namespace EventTest { class Program { static void Main(string[] args) { Test t = new Test(); t.numberChange += T_numberChange;//事件的方法 t.SetNum(20); t.SetNum(10); Console.ReadKey(); } private static void T_numberChange()//每次调用事件触发一次 { Console.WriteLine("改变"); Console.WriteLine("按下回车继续"); Console.ReadKey(); } } class Test { private int value; public delegate void numberChangeHandler();//先定义委托再定义事件 public event numberChangeHandler numberChange; protected void OnChange() { if (numberChange!=null) { numberChange();//事件调用位置 } else { Console.WriteLine("没有触发事件"); } } public void SetNum(int a) { if (value!=a) { value = a; Console.WriteLine(a); OnChange(); } } public Test() { int n = 5; SetNum(n); } } }
简单练习2

using System; namespace newEventTest { class Program { static void Main(string[] args) { newTest newTest = new newTest(); newTest.carEvent += NewTest_carEvent; newTest.sea("黎明", "轮船"); newTest.sea("黎明", "游艇"); newTest.sky("刘德华", "飞机"); newTest.sky("李白", "自行车"); Console.ReadKey(); } private static string NewTest_carEvent(string name, string car) { Console.WriteLine(name+"坐上了"+car); return car; } } class newTest { public delegate string carHandler(string name, string car); public event carHandler carEvent; public newTest() { } public void road(string name,string car) { Road flag; if (Enum.TryParse<Road>(car, true, out flag)) { carEvent(name, car); } } public void sea(string name,string car) { Sea flag; if (Enum.TryParse<Sea>(car, true, out flag)) { carEvent(name, car); } } public void sky(string name,string car) { Sky flag; if (Enum.TryParse<Sky>(car, true, out flag)) { carEvent(name, car); } } enum Road { 小轿车, 公交车, 火车 } enum Sea { 轮船, 游艇, 潜水艇 } enum Sky { 飞机, 火箭, 直升机 } } }
优化

using System; namespace newEventTest { class Program { static void Main(string[] args) { newTest newTest = new newTest(); newTest.carEvent += NewTest_carEvent; newTest.carEvent += Speed; newTest.Transport("黎明", "轮船"); newTest.Transport("黎明", "游艇"); newTest.Transport("刘德华", "飞机"); newTest.Transport("李白", "自行车"); Console.ReadKey(); } private static string Speed(string name, string car) { newTest.Road flag; newTest.Sea flag1; newTest.Sky flag2; if (Enum.TryParse(car, true, out flag)) { Console.WriteLine(car + "速度慢\n"); } else if (Enum.TryParse(car, true, out flag1)) { Console.WriteLine(car + "速度一般\n"); } else if (Enum.TryParse(car, true, out flag2)) { Console.WriteLine(car + "速度很快\n"); } else { Console.WriteLine(car + "无法识别\n"); } return car; } private static string NewTest_carEvent(string name, string car) { Console.WriteLine(name + "坐上了" + car); return car; } } class newTest { public delegate string carHandler(string name, string car); public event carHandler carEvent; public newTest() { } public void Transport(string name, string car) { Road flag; Sea flag1; Sky flag2; if (Enum.TryParse(car, true, out flag)) { carEvent(name, car); } else if (Enum.TryParse(car, true, out flag1)) { carEvent(name, car); } else if (Enum.TryParse(car, true, out flag2)) { carEvent(name, car); } else { Console.WriteLine(name+"所乘坐交通工具无法识别"); } } public enum Road { 小轿车, 公交车, 火车 } public enum Sea { 轮船, 游艇, 潜水艇 } public enum Sky { 飞机, 火箭, 直升机 } } }