2011-10-03 86 views
1

我有接口:爲什麼當我繼承它時,我的Timer返回null?

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個構造函數?爲什麼沒有初始化Timer和所有其他對象? – 2011-10-03 11:38:10

+0

片段沒有解釋。使用調試器。在兩個構造函數上設置一個斷點。 –

+0

我複製了代碼,它運行良好,您使用的是.net版本/ ide。 – wiero

回答

1

我看到你在僅次於構造函數初始化Timer。如果調用默認值(即沒有參數的構造函數)會怎麼樣?

+0

被調用的構造函數是另一個。這裏不是問題,雖然你提到了這些課程是如何設計的。 – VdesmedT

+0

@VdesmedT他的代碼不是很清楚。這個構造函數稍後可能會調用'NullReferenceException'。 – 2011-10-03 11:48:30

相關問題