抽象代表注册

本文关键字:注册 抽象 | 更新日期: 2023-09-27 18:24:28

是否可以通过创建Function或其他方法,以某种方式抽象以下if/else语句,从而使此操作更通用,减少"重复"代码?

我有2个不同的类(生命周期和选择)和4个代表类型,如以下示例:

foreach (Delegate d in delegates)
{
  if (d.GetType ().Equals (typeof (LifeCycle.OnCreatedEvent)))
    Lifecycle.OnCreatedHandlers += (LifeCycle.OnCreatedEvent) d;
  else if (d.GetType ().Equals (typeof (LifeCycle.OnDeletedEvent)))
    LifeCycle.OnDeletedHandlers += (LifeCycle.OnDeletedEvent) d;
  else if (d.GetType ().Equals (typeof (Selection.OnSelectEvent)))
    Selection.OnSelectHandlers += (Selection.OnSelectEvent) d;
  else if (d.GetType ().Equals (typeof (Selection.OnDeselectEvent)))
    Selection.OnDeselectHandlers += (Selection.OnDeselectEvent) d;
}

我已经考虑过泛型,但我真的不确定如何以一种适当的、兼容的方式抽象接收/转换部分,从而接受+=操作。

有什么建议吗?

谢谢!

抽象代表注册

怎么样:

foreach (Delegate d in delegates)
{
    LifeCycle.OnCreatedHandlers  += d as LifeCycle.OnCreatedEvent;
    LifeCycle.OnDeletedHandlers  += d as LifeCycle.OnDeletedEvent;
    Selection.OnSelectHandlers   += d as Selection.OnSelectEvent;
    Selection.OnDeselectHandlers += d as Selection.OnDeselectEvent;
}

它更干净一些,并且不存在测试然后转换为不同类型的潜在运行时问题。我相信这里的+= null不会有任何影响。