/// <summary>
/// 自定义类派
/// </summary>
class IncrementerEventArgs : EventArgs
{
public int IterationCount { get; set; }
}
/// <summary>
/// 发布者
/// </summary>
class Incrementer
{
//使用自定义类的泛型委托,也可以声明static静态的
//CountedADozen事件名称
public event EventHandler<IncrementerEventArgs> CountedADozen;
public void DoCount()
{
//自定义类对象
IncrementerEventArgs args = new IncrementerEventArgs();
for (int i = 1; i < 100; i++)
{
if (i % 12 == 0 && CountedADozen != null)
{
args.IterationCount = i;
//触发事件时使用EventHandler的参数
CountedADozen(this, args);
}
}
}
}
/// <summary>
/// 订阅者
/// </summary>
class Dozens
{
public int DozensCount { get; private set; }
public Dozens(Incrementer incrementer)
{
DozensCount = 0;
//订阅事件
incrementer.CountedADozen += IncrementerDozensCount;
}
//事件处理程序,
/*
不管参数使用的实际类型是什么,object类和EventArgs总是基类,这样evenethandler就能提供一个对所有事件和事件处理器的通用签名,只允许有两个参数,而不是各自都有不同的签名
*/
private void IncrementerDozensCount(object sender, EventArgs e)
{
DozensCount++;
}
}
class Program
{
static void Main(string[] args)
{
Incrementer inc = new Incrementer();
Dozens doz = new Dozens(inc);
inc.DoCount();
Console.WriteLine(doz.DozensCount);
Console.ReadKey();
}
}
C#事件
最新推荐文章于 2022-10-27 14:56:15 发布