Должен ли я обращаться к методам базового класса в службах Windows?

При выводе из ServiceBase, следует ли мне также вызвать методы базового класса?

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

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

Ответ 1

Короткий ответ - да, вы должны.

В этом конкретном случае базовая реализация метода OnStart не делает ничего существенного, но это деталь реализации, которая может измениться в любое время. Как общая практика, вы всегда должны вызывать базовый метод, если у вас нет веских оснований.

Ответ 2

Если вы декомпилируете сервисную базу с помощью ILSpy или аналогичного, вы увидите, что OnStart, OnStop и т.д. ничего не делают (по крайней мере, в .NET 4.0/4.5).

Но это поведение может измениться некоторое время, поэтому в будущих выпусках .NET может возникнуть нежелательное или непредсказуемое поведение, если вы его не назовете. Я считаю хорошей практикой назвать эти base.OnEvent() - Методы.

Ответ 3

Я не думаю, что когда-либо называл base.OnStart, когда писал службы.

Однако если вы делаете так, чтобы базовый класс вызывал первую строку вашего метода, а не последнюю!