using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Event2 { //定义猫大叫事件的代理 public delegate void AlertHandler(); //主人类 class Human { public event AlertHandler AlertEvent; public Mouse mouse = new Mouse(); public Human() { AlertEvent += new AlertHandler(mouse.Run); } //主人被惊醒的方法 public void Wake() { Console.WriteLine("主人:死猫别叫"); AlertEvent(); } } //老鼠类 class Mouse { //老鼠被吓包的方法 public void Run() { Console.WriteLine("老鼠:有危险,快跑!"); } } //猫类 class Cat { //猫大叫事件 public event AlertHandler AlertEvent; public Human human = new Human(); public Cat() { //猫大叫时执行Cry方法 AlertEvent += new AlertHandler(Alert); AlertEvent += new AlertHandler(human.Wake); } //猫大叫事件执行的处理程序 public void Alert() { Console.WriteLine("猫:喵...喵..."); } //猫大叫的方法 public void Cry() { //触发猫大叫的事件 AlertEvent(); } } //房子类 //class House //{ // //房子里有一只老鼠、一只猫和主人 // public Mouse mouse = new Mouse(); // public Cat cat = new Cat(); // public Human human = new Human(); // //由于在一个房子里,猫大叫的事件会引发老鼠“逃跑”和主人“惊醒” // //所以在这里把老鼠“逃跑”和主人“惊醒”两个方法挂接到猫大叫的事件上。 // public House() // { // cat.AlertEvent += new AlertHandler(mouse.Run); // cat.AlertEvent += new AlertHandler(human.Wake); // } //} //客户程序 class Program { static void Main(string[] args) { //猫大叫 Cat cat = new Cat(); cat.Cry(); } } }
using System; namespace Example_2 { /// <summary> /// 该程序演示委托和事件的用法。 /// </summary> public delegate void NotifyZero(); class EventTest { public event NotifyZero ZeroEntered; // 定义返回类型为 void 的委托 // 定义一个与委托 NotifyZero 关联的事件 //// 引发事件 public void RaiseZero() { ZeroEntered(); } } class Handlers { // 显示通知消息 public static void Disp() { Console.WriteLine("不允许以零为除数"); } } class TestZero { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // 存储值和结果的变量 int num1; int num2; double result; // EventTest 的对象 EventTest objEventTest = new EventTest(); // 订阅该事件 objEventTest.ZeroEntered += new NotifyZero(Handlers.Disp); // 接受两个数 Console.Write("请输入第一个数:"); num1 = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入第二个数:"); num2 = Convert.ToInt32(Console.ReadLine()); // 如果第二个数字为 0 则引发事件 if (num2 == 0) objEventTest.RaiseZero(); else { // 除法 result = num1 / num2; Console.WriteLine("除法的结果是:{0}", result); } } } }