C# 标准事件流实例代码
作者:滑猪小板 发布时间:2022-06-21 16:29:14
标签:c#,标准,事件流
服装价格变动,触发淘宝发布活动和消费者购买衣服事件流
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


猜你喜欢
- 简介机器学习在全球范围内越来越受欢迎和使用。 它已经彻底改变了某些应用程序的构建方式,并且可能会继续成为我们日常生活中一个巨大的(并且正在增
- 本文实例为大家分享了Android实现简单banner轮播图的具体代码,供大家参考,具体内容如下说明:想玩一个简单的轮播图效果
- 本文实例为大家分享了Android实现录音声波图的具体代码,供大家参考,具体内容如下图像类:package com.akm.test;/**
- 话说,最近一次系统维护 用JS读取导入Excel中的实验数据,出现被自动四舍五入。后来到客户现场听客户反馈 Excel实验数据要
- Java8被称作Java史上变化最大的一个版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表达式和StreamAPI。这两者也
- 知识准备Timer和ScheduledExecutorService是JDK内置的定时任务方案,而业内还有一个经典的定时任务的设计叫时间轮(
- 这几天用winform做了一个设置壁纸的小工具, 为图片添加当月的日历并设为壁纸,可以手动设置壁纸,也可以定时设置壁纸,最主要的特点是在图片
- bootstrap和application的区别说明bootstrap和application都是SpringBoot项目中的配置文件,他们
- 1. broker 清理文件介绍本系列RocketMQ4.8注释github地址,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈
- 本文实例讲述了C#数据结构之队列(Quene)。分享给大家供大家参考,具体如下:队列(Quene)的特征就是“先进先出”,队列把所有操作限制
- C#时间显示格式一起看下:24小时制this.toolStripStatusLabel1.Text = “您好,欢迎来到XXXX控制系统!”
- 对于int,double等的tostring:C 货币 2.5.ToString("C
- 前言很多人觉得Xamarin的开源少,没法用来开发项目。但,实际上Xamarin已经有很多开源代码了;只要不是特别特殊的项目,基本上是都可以
- 在popupWindow里面再弹出popupWindow的时候会报这样的错误ERROR/AndroidRuntime(888): andro
- 本文实例讲述了C#实现的文件上传下载工具类。分享给大家供大家参考,具体如下:这里给出的工具类是在VS2013环境下采用C#语言实现文件上传、
- OSS.Http项目对于.Net Standard标准库的支持已经迁移完毕,OSS开源系列两个最底层的类库已经具备跨运行时支持的能力。由于O
- 对于数组来说,我们想要对其中的一个元素进行引用,那就离不开new的使用。大家在学习new的时候,一般是以新建和初始化的身份出现的。如果是用在
- 前言最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深
- yml 文件规则yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的。不支持tab缩进可以使用 "-
- 目录安装Nginx准备SpringBoot应用添加网关现如今的项目开发基本都是微服务方式,导致一个系统中会有很多的服务,每个模块都对应着不同