C# 标准事件流实例代码
作者:滑猪小板 时间:2022-06-21 16:29:14
服装价格变动,触发淘宝发布活动和消费者购买衣服事件流
public class EventStandard
{
public class Clothes {
/// <summary>
/// 服装编码
/// </summary>
public string Id { get; set; }
/// <summary>
/// 服装名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 服装价格
/// </summary>
private double _price;
public double Price {
get { return this._price; }
set {
PriceRiseHandler?.Invoke(this, new PriceEventArgs()
{
OldPrice = this._price,
NewPrice = value
});
this._price = value;
}
}
/// <summary>
/// 服装价格变动事件
/// </summary>
public event EventHandler PriceRiseHandler;
}
/// <summary>
/// 衣服价格事件参数 一般会为特定的事件去封装个参数类型
/// </summary>
public class PriceEventArgs : EventArgs
{
public double OldPrice { get; set; }
public double NewPrice { get; set; }
}
public class TaoBao {
/// <summary>
/// 淘宝订户
/// </summary>
public void PublishPriceInfo(object sender, EventArgs e) {
Clothes clothes = (Clothes)sender;
PriceEventArgs args = (PriceEventArgs)e;
if (args.NewPrice < args.OldPrice)
Console.WriteLine($"淘宝:发布衣服价格下降的公告,{clothes.Name}服装直降{args.OldPrice - args.NewPrice}元,限时抢购!");
else
Console.WriteLine("淘宝:价格悄悄上涨或价格未变化,啥也不做");
}
}
public class Consumer
{
/// <summary>
/// 消费者订户
/// </summary>
public void Buy(object sender, EventArgs e)
{
Clothes clothes = (Clothes)sender;
PriceEventArgs args = (PriceEventArgs)e;
if (args.NewPrice < args.OldPrice)
Console.WriteLine($"消费者:之前价格{args.OldPrice},现在价格{args.NewPrice},果断买了!");
else
Console.WriteLine($"消费者:等等看,降价了再说");
}
}
public static void Show()
{
Clothes clothes = new Clothes()
{
Id = "12111-XK",
Name = "优衣库",
Price = 128
};
//订阅:把订户和发布者的事件关联起来
clothes.PriceRiseHandler += new TaoBao().PublishPriceInfo;
clothes.PriceRiseHandler += new Consumer().Buy;
//价格变化,自动触发订户订阅的事件
clothes.Price = 300;
}
}
调用:
clothes.Price = 300;
EventStandard.Show();
clothes.Price = 98;
EventStandard.Show();
来源:https://www.cnblogs.com/netlws/archive/2020/07/23/13364010.html
标签:c#,标准,事件流
0
投稿
猜你喜欢
java高并发之线程组详解
2023-02-15 21:30:25
Java序列化JSON丢失精度问题的解决方法(修复Long类型太长)
2022-10-15 00:01:34
解决Eclipse的Servers视图中无法添加Tomcat6/Tomcat7的方法
2023-03-30 22:22:27
详解Java单元测试之Junit框架使用教程
2022-03-06 02:55:56
Android 四种动画效果的调用实现代码
2021-06-26 17:59:54
深入了解Java虚拟机栈以及内存模型
2022-02-17 13:37:50
SpringBoot MainApplication类文件的位置详解
2023-10-28 16:21:12
Java的Swing编程中使用SwingWorker线程模式及顶层容器
2021-09-09 08:45:06
用java WebSocket做一个聊天室
2021-11-30 00:39:55
Android自定义View实现竖直跑马灯效果案例解析
2021-06-25 04:04:30
springboot bootstrap.yml nacos配置中心问题
2022-07-07 08:25:01
Maven添加Tomcat插件实现热部署代码实例
2021-12-09 02:03:49
C#在Winform开发中使用Grid++报表
2022-04-20 03:57:13
Android Gradle模块依赖替换使用技巧
2021-07-03 20:22:53
c# 类型的字段和方法设计建议
2022-09-23 22:20:44
spring data jpa使用详解(推荐)
2022-06-19 05:22:17
Java从同步容器到并发容器的操作过程
2021-10-14 05:26:58
Android编程实现的短信编辑器功能示例
2022-09-08 12:58:44
SpringCloud实战之Feign声明式服务调用
2022-07-02 08:25:30
用JAVA 设计生成二维码详细教程
2021-05-29 05:48:29