“委托组合”模式之前的“委托删除”是什么?

时间:2019-10-04 23:58:37

标签: c# unity3d design-patterns delegates

在许多必须订阅编辑器回调的Unity代码示例中,您经常遇到以下模式:

Undo.postprocessModifications -= OnPostprocessModifications;
Undo.postprocessModifications += OnPostprocessModifications;

// then, later, in some other method
Undo.postprocessModifications -= OnPostprocessModifications;

我曾经在EditorWindow内执行以下操作:

void OnEnable()
{
    Undo.postprocessModifications += OnPostprocessModifications;
}

void OnDisable()
{
    Undo.postprocessModifications -= OnPostprocessModifications;
}

问题:

在代表组合模式之前删除代表的确切含义是什么?

  

仅是为了确保额外的安全性还是有其他好处?

2 个答案:

答案 0 :(得分:1)

这是没有用的,并且肯定不是“模式”,首先,它是在您只有一个委托实例订阅该事件的前提下起作用的,如果您-=进行了预订,那么将没有任何实例但是如果以某种方式订阅了2个实例,那么-=仍然保留了另一个实例,而您执行+=之后,它们又回到了2。

如果-=然后+=对此有所帮助,它表明您正在失去对事件或程序流的跟踪/控制,并且仍然试图控制它失败。

如果为所有侦听器正确维护了+=启用和-=禁用的方法,那么您永远不必使用该“模式”。

答案 1 :(得分:0)

我想我已经找到了为什么他们使用这种模式:

Unity具有ON ERROR RESUME NEXT的行为,也就是说,即使发生异常,代码仍会继续。

这样做会阻止堆积回调,并因此导致怪异的代码行为。