如何避免直接调用事件?

时间:2012-03-01 22:06:03

标签: c# delegates

这是我们想要处理的方法,它的参数需要的是eventArgs所以它可以从中获取传播的行和列

private void sshResults_ButtonClicked(object eventSender, EditorNotifyEventArgs eventArgs)

但是消费者这样称呼它:

this.sshResults_ButtonClicked(null, new EditorNotifyEventArgs(new SpreadView(), null, Row - 1,Column - 1));

我不想这样称呼它,只是为了传递一个行和列,它是太多的资源。 重写这个的好方法是什么?也许我可以创建另一个方法,复制粘贴第一个方法的整个主体,然后只将行和列传递给它?那会导致代码冗余吗?有500个地方我们正在使用sshResults_ButtonClicked但我只是想改变上面提到的那个,所以我不想摆脱sshResults_ButtonClicked。

2 个答案:

答案 0 :(得分:4)

sshResults_ButtonClicked的相应部分重构为自己的方法,然后从事件处理程序中调用,并在其中明确调用它

答案 1 :(得分:1)

声明以下方法:

private void InvokeEvent(EventHandler<EditorNotifyEventArgs> eventHandler, int row, int column)
{
  if (eventHandler != null)
  eventHandler(null, new EditorNotifyEventArgs(new SpreadView(), null, row - 1,column - 1));
}

在需要举起活动时调用它: InvokeEvent(this.YourEventName, Row, Col);

无论如何,我认为你不需要调用事件处理程序 - 它将在引发事件时被调用。你想要举办一个活动。