前面文章中介绍了委托相关的观点,委托实例生存这一个或一组操纵,措施中将在某个特定的时刻通过委托实例使用这些操纵。
如果做过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();
}
}