2014-07-16 1 views
1

Windows 서비스의 기본 클래스를 만들려고합니다. 만들 때이 자동으로 생성됩니다 :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 
     } 
     } 

이 서비스는 데이터베이스와 I의 여러 유형과 상호 작용하기 때문에 내가 이렇게 할 이유는 가능한 한 많은 코드를 재사용하고 싶습니다. 각각은 동일한 OnStart, OnStop 등을가집니다 ... 파생 클래스에서 가상의 protected, public을 사용하려고했습니다. 생성 된 코드도 변경할 수 없습니다.

어떻게 보호 된 재정의 OnStart를 호출 할 수 있습니까? 나는 또한 비공개 멤버를 결국 가질 것이고 그래서 다른 질문을 할 필요가 없다. 내가 도움이 될만한 것을 부를 때 알아야 할 것이 있다면 ..

+0

'this' 인스턴스에 액세스하는 대신'Derived' 클래스 내에'Dervied' 인스턴스를 생성하는 이유는 무엇입니까? –

+0

아니 뇌의 방귀, 감사 – user3825831

답변

2

편집 후 : 상속해야한다. ServiceBase. 단순히 Service1의 범위 안에 public 클래스를 만들면 상속이 생성되지 않습니다. 올바른 정의는 다음과 같습니다 ONSTART 보호 방법은 인수가 필요 here

var servicesToRun = new[] 
{ 
    new Derived() 
}; 
ServiceBase.Run(servicesToRun); 

MSDN 참조 :

public class Derived : ServiceBase 
{ 
    protected override void OnStart(string[] args) 
    { 
     //example 
     int x = 1; 

     //call the base OnStart with the arguments 
     base.OnStart(args); 
    } 
} 

그런 다음 프로그램 클래스의 내부에, 당신이 그것을 실행하는 등의 하네스를 만들 것 string[] args 위의 코드를 기반으로합니다. 인수의 배열을 전달해야합니다.

+0

나는 당신의 의견을 기반으로 코드를 변경, 그게 무슨 뜻인가? 동일한 오류 .. – user3825831

+0

좋아, 그럼 내가 "파생 : ServiceBase"는 자동 생성 된 하나가 아니라 귀하의 답변에 분명 해요, 내가 만든 하나,이 맞습니까? – user3825831

+0

네 맞습니다. –