【问题标题】:Base class from Windows ServiceWindows 服务的基类
【发布时间】:2014-07-16 16:59:08
【问题描述】:

我正在尝试为 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?我最终也会有私人成员,所以我不必再问其他问题,如果在打电话给那些也会有帮助的人时我需要知道什么..

【问题讨论】:

  • 您有什么理由在Derived 类中创建Dervied 的实例而不是访问this 实例?
  • 不,那只是脑放屁,谢谢

标签: c# service base-class


【解决方案1】:

编辑后: 您必须从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。你需要传递一个参数数组。

【讨论】:

  • 好的,所以我很清楚你的答案,“Derived : ServiceBase”不是自动生成的,而是我创建的,对吗?
猜你喜欢
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多