C# Event事件

1. System.EventArgs

是一个预定义的框架类,除了静态的Empty属性之外,它没能其它成员
EventArgs是为事件传递信息的类的基类

2. PriceChangedEventArgs
  • 传递信息的类

根据所含有的信息进行命名,而不是所使用的事件
通常通过属性或只读字段来暴露数据

3. 为事件选择或定义一个委托

返回类型是void
接收两个参数,第一个参数类型是object,第二个参数类型是EventArgs的子类。第一个参数表示事件的广播者,第二个参数包含需要传递的信息
名称必须是以EventHandler结尾

Framework定义了一个范型委托System.EventHandler

public delegate void EventHandler<TEventArgs>
	(object source, TEventArgs e) where TEventArgs : EventArgs
4. 针对选择的委托定义事件
public class Stock
{
	...
	public event EventHandler<PriceChangedEventArgs> PriceChanged;	
}
5. 可触发事件的protected virtual方法
  • 方法名必须和事件一致,前面再加上On,接收一个EventArgs参数
public class Stock
{
	...
	public event EventHandler<PriceChangedEventArgs> PriceChanged;
	
	protected virtual void onPriceChanged(PriceChangedEventArgs e)
    {
    	PriceChanged?.Invoke(this, e);
    }
}

源码

using System;

namespace EventDemo
{
    public class PriceChangedEventArgs: EventArgs
    {
        public readonly decimal LastPrice;
        public readonly decimal NewPrice;

        public PriceChangedEventArgs(decimal lastPrice, decimal newPrice)
        {
            LastPrice = lastPrice;
            NewPrice = newPrice;
        }
    }

    class Stock
    {
        string symbol;
        decimal price;

        public Stock(string symbol)
        {
            this.symbol = symbol;
        }

        public event EventHandler<PriceChangedEventArgs> PriceChanged;

        protected virtual void onPriceChanged(PriceChangedEventArgs e)
        {
            PriceChanged?.Invoke(this, e);
        }

        public decimal Price
        {
            get { return price; }
            set
            {
                if (price == value) return;
                decimal oldPrice = price;
                price = value;
                onPriceChanged(new PriceChangedEventArgs(oldPrice, price));
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Stock stock = new Stock("MORN");
            stock.Price = 160;
            stock.PriceChanged += stock_PriceChanged;
            stock.Price = 180;
        }

        static void stock_PriceChanged(object sender, PriceChangedEventArgs e)
        {
            if((e.NewPrice - e.LastPrice) / e.LastPrice > 0.1M)
            {
                Console.WriteLine("Alert, 10% stock price increase!");
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSE(Server-Sent Events)是一种用于在Web浏览器和服务器之间实现实时双向通信的技术。它基于HTTP协议,并使用事件驱动的方式来传输数据。 SSE允许服务器向客户端发送异步消息,同时客户端可以使用标准的JavaScript事件监听器来处理这些消息。通过SSE,服务器可以主动向客户端发送数据,而不需要客户端发起请求。这种服务器主动推送的方式使得实时数据的传输变得更加方便和高效。 SSE与其他实时通信协议(如WebSockets)相比具有一些优势。首先,SSE使用简单的HTTP协议,因此可以在任何支持HTTP的浏览器和服务器上使用,无需额外的插件或协议支持。其次,SSE使用长连接来实现实时通信,这意味着服务器和客户端之间的连接可以持久存在,而不需要频繁地创建和关闭连接。这种长连接的机制可以节省网络资源,并提高通信效率。 在实际应用中,SSE可以用于多种场景。比如,可以将其用于实时股票报价、即时通讯、实时评论系统等。通过SSE,可以实现服务器向客户端实时推送股票价格变动、新消息、评论更新等内容。这种实时推送的方式可以提升用户体验,同时减少服务器资源的占用。 总之,SSE是一种实现实时双向通信的技术,通过简单的HTTP协议和事件驱动的方式,服务器可以主动向客户端发送异步消息,以实现实时数据的传输和推送。在实际应用中,SSE可以用于多种场景,提升用户体验,并减少服务器资源的占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值