对象自定义事件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Event
{
    class Program
    {
        static void Main(string[] args)
        {
            Customer customer = new Customer();
            FuWuYuan fuWuYuan = new FuWuYuan();
            customer.Order += fuWuYuan.Action;
            customer.Action();
            customer.FuQian();
        }
    }
    // 养成习惯事件参数继承自EventArgs
    public class OrderEventArgs : EventArgs
    {
        /// <summary>
        /// 菜名
        /// </summary>
        public string DishName { get; set; }
        /// <summary>
        /// 分量
        /// </summary>
        public string Size { get; set; }
    }
    // 声明事件参数为事件拥有者Customer和事件参数OrderEventArgs
    // 代码规范 EventHandler后缀标识用来声明事件的
    public delegate void OrderEventHandler(Customer customer,OrderEventArgs e);
    public class Customer
    {
        // 声明事件字段
        private OrderEventHandler orderEventHandler;
        // 添加事件
        public event OrderEventHandler Order {
            add
            {
                this.orderEventHandler += value;
            }
            remove
            {
                this.orderEventHandler -= value;
            }
        }
        public double Bill { get; set; }
        public void FuQian() 
        {
            Console.WriteLine("我付了${0}元钱", this.Bill);
        }
        public void JinMen()
        {
            Console.WriteLine("我进入饭店!");
        }
        public void ZuoXia()
        {
            Console.WriteLine("找位置坐下");
        }
        public void DianCai()
        {
            Console.WriteLine("拿起菜单......");
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("思考中......");
            }
            if (this.orderEventHandler != null) 
            {
                OrderEventArgs e = new OrderEventArgs();
                e.DishName = "番茄炒鸡蛋";
                e.Size = "Max";
                this.orderEventHandler.Invoke(this,e);
            }
        }
        public void Action()
        {
            Console.ReadLine();
            this.JinMen();
            this.ZuoXia();
            this.DianCai();
        }
    }
    public class FuWuYuan
    {
        public void Action(Customer customer, OrderEventArgs e)
        {
            Console.WriteLine("记录了一个菜{0}", e.DishName);
            double qian = 10;
            switch (e.Size)
            {
                case "Max":
                    qian = qian * 1.5;
                    break;
                case "Mini":
                    qian = qian * 0.5;
                    break;
                default:
                    break;
            }
            customer.Bill += qian;
        }
    }
}

 

posted @ 2023-02-27 18:59  Installllllll  阅读(22)  评论(0)    收藏  举报