2011-01-31 113 views
9

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

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

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

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

TallyScenarioObjects(null); 
+0

只要你的事件处理程序处理空值 – 2011-01-31 22:45:30

回答

17

只是封装常见的逻辑到另一种方法,可以从事件处理函数中调用:

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

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

private void DoStuff() { ... } 

private void AnotherMethod() 
{ 
    DoStuff(); 
} 

这就是说,你的处理器的方法,没有什么特别的地方,所以你总是可以伪装参数并直接调用它。我不会去那条路线。

6

是,将工作,但它会是更好的做法有第二个方法可以直接或从事件处理函数调用:

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

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

private void DoTally(....) 
{ 
} 

如果没有别的你就不会混淆其他开发商谁赢了不要期待看到这样一个事件处理程序。

1

我同意其余的。让你的事件调用一个方法。然后,您可以从任何地方调用该方法。

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

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

private void MyMethod() 
{ 
    //Code here. 
}