理解C#中的事件
2021-07-25 03:03
前面文章中介绍了委托相关的概念,委托实例保存这一个或一组操作,程序中将在某个特定的时刻通过委托实例使用这些操作。
如果做过GUI程序开发,可能对上面的描述会比较熟悉。在GUI程序中,单击一个button会触发一个click事件,然后会执行一系列的操作,这一系列的操作就被存放在一个委托实例中。
接下来我们就看看事件。
使用委托中的问题
回到前面文章中苹果和富士康的例子,苹果将iphone的组装、包装和运输的工作全部委托给了富士康。
根据上面的描述,我们修改了一下代码,在Apple这个类中加入一个订单属性,苹果只要接到新的订单,就发送一个通知给富士康,然后富士康就会执行一系列的操作了(组装、包装和运输)。
在主程序中,苹果将iphone的组装、包装和运输工作委托给了富士康,然后苹果每次收到订单,就会通过委托实例”VerdorToAssembleIphone”让富士康去执行一系列操作。
代码如下:
class Apple
{
//声明委托类型
public delegate void AssembleIphoneHandler(int num);
public AssembleIphoneHandler VerdorToAssembleIphone;
public void DesignIphone()
{
Console.WriteLine(“Design Iphone By Apple”);
}
private int orderNum;
public int OrderNum
{
get { return this.orderNum; }
set
{
this.orderNum = value;
if (VerdorToAssembleIphone != null)
{
VerdorToAssembleIphone(this.orderNum);
}
}
}
}
class Foxconn
{
//与委托类型签名相同的方法
public void AssembleIphone(int num)
{
Console.WriteLine(“Assemble {0} Iphone By Foxconn”, num);
}
public void PackIphone(int num)
{
Console.WriteLine(“Pack {0} Ipnone By Foxconn”, num);
}
public void ShipIphone(int num)
{
Console.WriteLine(“Ship {0} Iphone By Foxconn”, num);
}
}
class Program
{
static void Main(string[] args)
{
Apple apple = new Apple();
Foxconn foxconn = new Foxconn();
apple.VerdorToAssembleIphone = new Apple.AssembleIphoneHandler(foxconn.AssembleIphone);
apple.VerdorToAssembleIphone += new Apple.AssembleIphoneHandler(foxconn.PackIphone);
apple.VerdorToAssembleIphone += new Apple.AssembleIphoneHandler(foxconn.ShipIphone);
apple.OrderNum = 100;
Console.Read();
}
}
理解C#中的事件
本文地址: http://www.paobuke.com/develop/c-develop/pbk23129.html