手动调用事件处理程序

wul*_*pro 9 c# event-handling

我有一个事件处理程序方法,它直接作为标准方法调用.也就是说,它不仅在我的事件发生时调用,而且还作为私有方法调用.

UtilStk.StkRoot.OnStkObjectAdded += new 
    IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

在直接调用此处理程序时是否适合传递null参数?

TallyScenarioObjects(null);
Run Code Online (Sandbox Code Playgroud)

Ed *_* S. 18

只需将公共逻辑封装到另一个可以从事件处理程序调用的方法中:

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
    DoStuff();
}

private void DoStuff() { ... }

private void AnotherMethod()
{
    DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

也就是说,你的处理程序一个方法,没有什么特别之处,所以你总是可以伪装参数并直接调用它.我不会去那条路.


Chr*_*isF 6

是的,这样可行,但是更好的做法是拥有一个可以直接调用或从事件处理程序调用的第二个方法:

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
     DoTally(....);
}

private void DoTally(....)
{
}
Run Code Online (Sandbox Code Playgroud)

如果没有别的,你不会混淆其他开发人员,他们不会期望看到这样调用的事件处理程序.