我正在尝试为Windows服务创建基类。创建时,会自动创建:
public partial class Service1 : ServiceBase
{
public class Base //added this to become a Base class
{
protected override void OnStart(string[] args)//generated code for Service
{
//a bunch of code here that I create
}
}
}
我想推出这个课程:
public class Derived : Base
{
void Call(string[] args)
{
Call test = new Call();
test.OnStart(args);///error says no suitable method found to override
}
}
我想这样做的原因是因为这个服务将与多种类型的数据库进行交互,我希望尽可能多地重用代码,每个代码都有相同的OnStart,OnStop等......我试过了在派生类中使用virtual,protected,public。我也无法更改生成的代码。
如何调用受保护的覆盖OnStart?我最终也会有私人会员,所以我不必再提出另一个问题,如果我在调用那些有用的东西时需要知道的话......
答案 0 :(得分:2)
编辑后:
你必须继承ServiceBase
。只需在Service1范围内创建公共类,就不会创建继承。正确的定义是:
public class Derived : ServiceBase
{
protected override void OnStart(string[] args)
{
//example
int x = 1;
//call the base OnStart with the arguments
base.OnStart(args);
}
}
然后,在您的Program类中,您将创建这样的线束来运行它:
var servicesToRun = new[]
{
new Derived()
};
ServiceBase.Run(servicesToRun);
MSDN参考here
受保护的OnStart方法需要参数string[] args
,具体取决于您的上述代码。你需要传递一组参数。