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);
}
}
}
}