当前位置: 首页 > news >正文

C#自定义事件的案例

方法一,详细的声明

namespace HelloWorldConsole
{internal class Program{static void Main(string[] args){Customer customer = new Customer();Waiter waiter = new Waiter();customer.Order += waiter.Action;customer.Action();}}public class OrderEventArgs : EventArgs{public string DishName { get; set; }public string Size { get; set; }}public delegate void OrderEventHandler(Customer customer, OrderEventArgs e);public class Customer{public double Bill { get; set; }private OrderEventHandler orderEventHandler;public event OrderEventHandler Order{add { orderEventHandler += value; }remove { orderEventHandler -= value; }}public void PayTheBill(){Console.WriteLine("i will pay-{0}", Bill);}public void Think(){if (orderEventHandler != null){OrderEventArgs e = new OrderEventArgs();e.DishName = "宫保鸡丁";e.Size = "large";orderEventHandler(this, e);}}public void Action(){Think();PayTheBill();}}public class Waiter{public void Action(Customer customer, OrderEventArgs e){double price = 10;switch (e.Size){case "small": price /= 2; break;case "large": price *= 1.5; break;default: break;}Console.WriteLine("i will serve the dish {0}-{1}", e.DishName, e.Size);customer.Bill += price;}}
}

方法二,简化的声明,也是最常用的写法

namespace HelloWorldConsole
{internal class Program{static void Main(string[] args){Customer customer = new Customer();Waiter waiter = new Waiter();customer.Order += waiter.Action;customer.Action();}}/// <summary>/// 事件参收/// </summary>public class OrderEventArgs : EventArgs{public string DishName { get; set; }public string Size { get; set; }}public class Customer{public double Bill { get; set; }public event EventHandler Order;public void Think(){if (Order != null){OrderEventArgs e = new OrderEventArgs();e.DishName = "宫保鸡丁";e.Size = "large";Order(this, e);}}public void PayTheBill(){Console.WriteLine("i will pay-{0}", Bill);}public void Action(){Think();PayTheBill();}}public class Waiter{public void Action(object sender, EventArgs _e){Customer customer = sender as Customer;OrderEventArgs e = _e as OrderEventArgs;double price = 10;switch (e.Size){case "small": price /= 2; break;case "large": price *= 1.5; break;default: break;}Console.WriteLine("i will serve the dish {0}-{1}", e.DishName, e.Size);customer.Bill += price;}}
}

http://www.lryc.cn/news/474282.html

相关文章:

  • flume系列之:flume机器做条带划分提高磁盘性能和吞吐量的详细步骤
  • C++基于opencv的视频质量检测--图像清晰度检测
  • 力扣11.1
  • 打印室预约系统|基于java和小程序的打印室预约系统设计与实现(源码+数据库+文档)
  • 操作系统-多线程案例
  • 什么是FUSE用户态文件系统
  • [每日一练]销售分析(通过数据的0/1转换进行是否存在的查询)
  • .NET Core WebApi第7讲:项目的发布与部署
  • 【python 将数据写入csv文件】正确方式
  • OpenCV4.8 开发实战系列专栏之 10 - 像素值统计
  • pandas计算相关性并画热力图
  • 初始Docker
  • Redis-概念、安装、基本配置
  • qt QPlainTextEdit详解
  • 【机器学习】23. 聚类-GMM: Gaussian Mixture Model
  • 深度探索C++对象模型
  • 电脑怎么设置开机密码:保障个人信息安全的第一步
  • MybatisPlus入门(六)MybatisPlus-null值处理
  • 红帽认证有必要考吗?这四大人群推荐考取!
  • 基于SSM+微信小程序的社团登录管理系统(社团1)
  • html中cookie如何存储
  • C++基础三(构造函数,形参默认值,函数重载,单例模式,析构函数,内联函数,拷贝构造函数)
  • Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域
  • 如何使用VBA识别Excel中的“单元格中的图片”(2/2)
  • 2024系统架构师---下午题目常考概念
  • 【Linux】从零开始认识五种IO模型 --- 理解五种IO模型,开始使用非阻塞IO
  • Spring Boot 集成阿里云直播点播
  • 舍伍德业务安全架构(Sherwood Applied Business Security Architecture, SABSA)
  • 论可以对抗ai编程的软件开发平台(直接把软件需求描述变成软件的抗ai开发平台)的设计
  • 饿了么数据库表设计