就发送一个通知给富士康

时间:2021-12-10 07:43:00

前面文章中介绍了委托相关的观点,委托实例生存这一个或一组操纵,措施中将在某个特定的时刻通过委托实例使用这些操纵。

如果做过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();

}

}