private delegate void stopMachineryDelegate();
public stopMachineryDelegate StopMachinery;

this.StopMachinery += new stopMachineryDelegate(painting);


在上面第二行的示例中,我们是在创建委托实例还是委托变量?如果第二行创建类型为stopMachineryDelegate的委托实例,那么在第三行中我们在做什么?

最佳答案

第一行用于定义您的委托类型(stopMachineryDelegate),因为该委托不接受任何参数并且不返回任何值(void)。

第二行声明了一个名为StopMachinery的类型的字段。此时,StopMachinery为空。

第三行后面有一些语法糖。如果此时StopMachinery为null,它将创建该MulticastDelegate的新实例,然后将painting方法委托添加到其调用列表中。

如果您只想向该字段分配一个委托,则可以简单地编写:

 // implicitly wrap the `painting` method into a new delegate and
 // assign to the `StopMachinery` field
 this.StopMachinery = painting;


另一方面,使用+=允许您指定调用StopMachinery时要调用的委托的列表:

 this.StopMachinery += painting;
 this.StopMachinery += someOtherMethod;
 this.StopMachinery += yetAnotherMethod;


在后一种情况下,对StopMachinery委托的调用将按照指定顺序同步调用列表中的每个方法。

10-06 06:49