这篇文章主要讲述泛型事件委托。
参考网址: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();
}
}
运行效果如下