private delegate void stopMachineryDelegate();
public stopMachineryDelegate StopMachinery;
this.StopMachinery += new stopMachineryDelegate(painting);
在上面的第二行示例中,我们是创建委托实例还是委托变量?如果第二行创建了stopMachineryDelegate类型的委托实例,那么在第三行中我们在做什么?
答案 0 :(得分:2)
在第二行,您声明了stopMachineryDelegate
类型的变量。但此时变量仍然未分配,保留默认值null
。
在第三行,您将通过创建指向painting
函数的委托的新实例为此变量赋值。
因此,一旦分配了此变量,您就可以使用它来调用它指向的函数:
this.StopMachinery();
基本上会在同一个类中调用painting
方法。
答案 1 :(得分:2)
第一行用于定义委托类型(stopMachineryDelegate
),作为委托,不接受任何参数并且不返回任何值(void
)。
第二行是声明该类型的字段,名为StopMachinery
。此时,StopMachinery
为空。
第三行背后有一些语法糖。如果此时StopMachinery
为空,它将创建该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
委托的调用将按照指定的顺序同步调用调用列表中的每个方法。