2011-10-03 7 views
1

나는 인터페이스가 있습니다상속 한 이유는 무엇입니까?

public interface IProcess 
    { 
     void Step_One(); 
     void Step_Two(); 
     Timer ProcessTimer{get; set;} 
    } 

기본 클래스 ..

public class ProcessBase 
    { 
     protected Timer processTimer; 
     public Timer ProcessTimer{get{ return processTimer;}set{processTimer=value;}} 



     //sets up all the common objects 
     public ProcessBase() 
     { 


     } 

     //This constructor will call the default constructor^
     protected ProcessBase(long intervalArg) : this() 
     { 
      processTimer = new Timer(intervalArg); 
      processTimer.Enabled = true; 

     } 

    } 

구체적인 클래스

public class ReportedContentProcess : ProcessBase, IProcess 
{ 

    public ReportedContentProcess(): base(5000) 
    { 

    } 

    public void Step_One() 
    { 
    } 

    public void Step_Two() 
    { 
    } 
} 

을하지만 난 시도하고 공장에서 그것을 얻을 때 ...

public static class ProcessFactory 
    { 

     public static List<IProcess> GetProcessors() 
     { 

      ReportedContentProcess.ReportedContentProcess reportedContentProcess = new ReportedContentProcess.ReportedContentProcess(); 

      List<IProcess> retProcesses = new List<IProcess>(); 
      retProcesses.Add(reportedContentProcess); 
      return retProcesses; 

     } 
    } 

다음은

processorsForService = ProcessFactory.GetProcessors(); 


       foreach(IProcess p in processorsForService) 
       { 
        p.ProcessTimer.Elapsed += new ElapsedEventHandler(IProcess_Timer_Elapsed); 
       } 

내가 p.ProcessTimer가 null 말하는 런타임 오류가 ... 타이머에 핸들러를 연결합니다. 왜 이런거야? 기본 클래스에서 상속하고 인스턴스화 할 수없는 이유를 이해할 수 없습니다. 심지어 인터페이스에 포함 시켰습니다 ...

+0

왜 생성자가 2 개인가요? 타이머와 다른 모든 객체를 초기화하는 것이 어떨까요? –

+0

스 니펫에 대한 설명이 없습니다. 디버거를 사용하십시오. 두 생성자 모두에 중단 점을 설정하십시오. –

+0

내가 코드를 복사하고 잘 작동합니다 .net 버전/ide 당신이 사용하고 있습니까? – wiero

답변

1

두 번째 생성자에서만 Timer을 초기화하는 것으로 나타났습니다. 기본 매개 변수가 호출되는 경우 (즉 매개 변수가없는 생성자)는 어떻게됩니까?

+0

호출되고있는 생성자가 다른 하나입니다. 이 수업이 어떻게 설계되었는지에 대한 요지를 세웠지 만 문제는 아닙니다. – VdesmedT

+0

@VdesmedT 그의 코드는 분명하지 않습니다. 이 생성자는 나중에 NullReferenceException을 발생시키는 것으로 불릴 수도 있습니다. –

관련 문제