委托事件

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);
            }
        }
    }
}
原文地址:https://www.cnblogs.com/l25321937/p/4450705.html