.NET漫游指南-009-泛型事件委托

这篇文章主要讲述泛型事件委托。
参考网址:https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx#
源码地址:http://download.csdn.net/download/geshicuowu/10003963
在之前的内容中分别讲述了委托,事件,泛型。但是在项目开发中一般都是结合使用的。下面这个例子就是简要讲述这三者如何结合使用。
场景:模拟股票的行情推送,交易员订阅行情之后,行情发生变化,交易员就会收到变化的行情。
逻辑图

1:定义一个泛型的事件委托参数GenericEventArgs继承自EventArgs用于传递事件的相关数据信息。这里设置为泛型的优势是,可以在整个项目中重用该参数,降低了冗余。

    public class GenericEventArgs<T> : EventArgs
    {
        public GenericEventArgs(T value)
        {
            this.Value = value;
        }
        public T Value { get; set; }
    }

2:定义一个数据对象StockInfor,用来作为事件信息的传递参数。

   public class StockInfor
    {
        double stockPrice;
        public double StockPrice
        {
            set { stockPrice = value; }
            get { return stockPrice; }
        }

        int stockRange;
        public int StockRange
        {
            set { stockRange = value; }
            get { return stockRange; }
        }
    }

3:定义一个交易员对象,用来作为订阅者。其中有个方法是GetStockInfor,用于获取事件的信息。

    class Trader
    {
        public string Name
        {
            set;
            get;
        }

        public void GetStockInfor(object sender ,GenericEventArgs<StockInfor> e)
        {
            //拆箱
            var stockInfor = e.Value as StockInfor;

            System.Console.WriteLine(string.Format("{0} get the stock information price:{1}  range:{2} ",
                                                                      Name, stockInfor.StockPrice, stockInfor.StockRange));
        }
    }

以上准备工作完成了,接下来就是实例化事件源和订阅者,然后对事件委托进行订阅,最后启动事件源。就会看见当股票信息发生变化时,就会通过事件委托EventHandle来告知交易员。

class Program
    {
        static void Main(string[] args)
        {
            Stock stockInfor = new Stock();
            Trader Jone = new Trader();
            Jone.Name = "Jone";

            Trader Tom = new Trader();
            Tom.Name = "Tom";

            //进行事件委托
            stockInfor.stockUpdate += Jone.GetStockInfor;
            stockInfor.stockUpdate += Tom.GetStockInfor;

            stockInfor.Start();
            Console.ReadKey();
        }
    }

运行效果如下
运行效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值