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
委托的调用将按照指定顺序同步调用列表中的每个方法。