开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 10777|回复: 0
收起左侧

[C#源码] 自己写个事件。。。

[复制链接]
发表于 2020-4-2 20:31:35 | 显示全部楼层 |阅读模式   山东省青岛市
using System;
using System.Threading;

namespace C井事件 {
    class Program {
        static void Main(string[] args) {
            //自定义事件();//1,2系统内置参数事件
            Customer customer = new Customer();
            Waiter waiter = new Waiter();
            customer.eventHandler += waiter.Action;//ctrl+. 然后敲回车(Action 事件处理器)
            customer.Action();//事件拥有者的内部逻辑来触发事件
            customer.PayTheBill();//最后买单结束  
        }
        private static void 自定义事件() {
            Customer customer = new Customer();
            Waiter waiter = new Waiter();
            customer.OrderEvent += waiter.Action;
            customer.Action();
            customer.PayTheBill();
        }
    }
    //专门用来声明事件,表明约束事件处理器,未来创建出来的实例存储事件处理器
    public delegate void OrderEventHandler(Customer customer, OrderEventArgs e);
    public class Customer {
        /*
        private OrderEventHandler orderEventHandler;//用来引用事件处理器
        public event OrderEventHandler OrderEvent {
            add { orderEventHandler += value; }
            remove { orderEventHandler -= value; }
        }
        */
        public event OrderEventHandler OrderEvent;//自定义的
        public event EventHandler eventHandler;//系统内置
        public double Bill { get; set; }
        public void PayTheBill() {
            Console.WriteLine($"I will pay ${Bill}");
        }
        public void WalkIn() {
            Console.WriteLine("Walk into the 餐馆");
            Thread.Sleep(1000);
            Console.WriteLine("Sit down...");
        }
        public void Think() {
            for (int i = 0; i < 5; i++) {
                Console.WriteLine("Let me think ....");
                Thread.Sleep(1000);
            }
            /*** S1 旧版
            if (this.orderEventHandler != null) {//是否有服务员订阅该事件
                OrderEventArgs e = new OrderEventArgs() { DishName = "宫保鸡丁",Size="small" };
                this.orderEventHandler.Invoke(this, e);
            }***/
            if (this.OrderEvent != null) {//是否有服务员订阅该事件
                OrderEventArgs e = new OrderEventArgs() { DishName = "自定义的参数", Size = "small" };
                this.OrderEvent(this, e);
            }
            //内置事件
            if (this.eventHandler != null) {//是否有服务员订阅该事件
                OrderEventArgs e = new OrderEventArgs() { DishName = "eventArgs", Size = "large" };
                this.eventHandler.Invoke(this, e);
            }
        }
        public void Action() {
            this.WalkIn();
            this.Think();
        }
    }
    public class Waiter {
        internal void Action(Customer customer, OrderEventArgs e) {
            //throw new NotImplementedException();
            Console.WriteLine($"(自定义参数事件) I will server you the dish {e.DishName}");
            double price = 10;
            switch (e.Size) {
                case "small":
                    price = price * 0.5; break;
                case "large":
                    price = price * 1.5; break;
                default: break;
            }
            customer.Bill += price;
        }

        internal void Action(object sender, EventArgs eventArgs) {
            Customer customer = sender as Customer;
            OrderEventArgs e = eventArgs as OrderEventArgs;
            Console.WriteLine($"(EventArgs参数事件)I will server you the dish {e.DishName}");
            double price = 10;
            switch (e.Size) {
                case "small":
                    price = price * 0.5; break;
                case "large":
                    price = price * 1.5; break;
                default: break;
            }
            customer.Bill += price;
        }
    }
    public class OrderEventArgs:EventArgs {
        public string DishName { get; set; }//菜名
        public string Size { get; set; }//大小份
    }
}


您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表