在 Windows 服务中,我是否应该调用基类的方法?

14

当从ServiceBase派生类时,我是否也应该调用基类的方法?

protected override void OnStart(string[] args)
{
    //
    // The stuff I do when the service starts.
    //

    base.OnStart(args); // Do I need to call this?
}
3个回答

17

简短回答是, 是的,你应该这么做。

在这种情况下,OnStart方法的基础实现并没有做任何重要的事情,但这是一个随时可能更改的实现细节。作为一般惯例,除非你有充分的理由不这样做,否则你应该始终调用基础方法。


5

如果你使用ILSpy等反编译工具对服务基类进行反编译,你会发现在.NET 4.0 / 4.5中的OnStart、OnStop等方法没有任何操作。

但这种行为可能会在未来的.NET版本中发生改变,如果你不调用它的话,就可能会出现意外或无法预测的行为。因此,我认为调用这些base.OnEvent()方法是一个好的实践。


0

我写服务时从未调用过base.OnStart。

然而,如果你确实需要调用,一定要让基类在方法的第一行调用,而不是最后一行!


我所阅读的有关覆盖的所有内容都指出,基础引用始终首先被调用。我需要进行测试,但我认为编译器可能会要求这样做。 - KennyZ
5
编译器不需要它。你可以随时调用它,也可以完全不调用它。 - Austin Salonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接