using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace EvenDemo { /// <summary> /// 事件参数类,继承自EventArgs,包含事件信息 /// </summary> public class DoorInfoEventArgs : EventArgs { /// <summary> /// 显示门状态信息 /// </summary> public string doorInfo; /// <summary> /// 构造函数 /// </summary> /// <param name="isOpen">是否打开门,true/false</param> public DoorInfoEventArgs(bool isOpen) { if (isOpen) { doorInfo = "门现在已经打开了!"; } else { doorInfo = "门不能打开!"; } } } /// <summary> /// 定义门代理 /// </summary> /// <param name="sender"></param> /// <param name="e">事件信息</param> public delegate void OpenDoorEventHandler(object sender, DoorInfoEventArgs e); /// <summary> /// 事件类 /// </summary> public class CommandDoor { /// <summary> /// 定义事件(即:创建代理对象) /// </summary> public event OpenDoorEventHandler openDoor; /// <summary> /// 定义触发事件的属性 /// </summary> public bool IsOpen { set { DoorInfoEventArgs myEven = new DoorInfoEventArgs(value);//事件参数 openDoor(this, myEven);//调用事件代理 } } } class Program { static void Main(string[] args) { //创建事件对象,并添加事件实现代理的实例化 CommandDoor commandDoor = new CommandDoor(); commandDoor.openDoor += new OpenDoorEventHandler(Door); //由设置属性的值触发事件 Console.WriteLine("是否打开门?Y/N"); char commandChar =(char) Console.Read(); if (commandChar == 'Y') { commandDoor.IsOpen = true; } else { commandDoor.IsOpen = false; } Console.ReadKey(); } /// <summary> /// 事件执行的方法 /// </summary> /// <param name="source"></param> /// <param name="e"></param> public static void Door(object source, DoorInfoEventArgs e) { Console.WriteLine(e.doorInfo); } } }