C# 为什么我的计时器继承后返回空值?
我有一个界面:C# 为什么我的计时器继承后返回空值?,c#,oop,design-patterns,factory-pattern,C#,Oop,Design Patterns,Factory Pattern,我有一个界面: public interface IProcess { void Step_One(); void Step_Two(); Timer ProcessTimer{get; set;} } 基类 public class ProcessBase { protected Timer processTimer; public Timer ProcessTimer{get{ re
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;
}
}
我得到一个运行时错误,说p.ProcessTimer为null。为什么会这样?我继承并实例化了基类,但我无法理解为什么它为null。我甚至将它包含在界面中…我看到您只在第二个构造函数中初始化
计时器。如果调用了默认构造函数(即没有参数的构造函数),该怎么办?我看到您只在第二个构造函数中初始化计时器。如果调用了默认构造函数(即没有参数的构造函数),该怎么办?为什么有两个构造函数?为什么没有一个可以初始化计时器
和所有其他对象?代码段中没有解释。使用调试器。在两个构造函数上都设置一个断点。我复制了代码,它工作得很好,您使用的是什么.net版本/ide?应该可以。我认为您正在执行计时器生成之前的最后一个代码块,您是否尝试过单步执行程序?>ReportedContentProcess.ReportedContentProcess<看起来很奇怪-单步重复检查您是否真正调用了正确的类为什么有2个构造函数?为什么没有一个可以初始化计时器
和所有其他对象?代码段中没有解释。使用调试器。在两个构造函数上都设置一个断点。我复制了代码,它工作得很好,您使用的是什么.net版本/ide?应该可以。我认为您正在执行计时器生成之前的最后一个代码块,您是否尝试过单步执行程序?>ReportedContentProcess.ReportedContentProcess<看起来很奇怪-单步检查是否确实调用了正确的类调用的构造函数是另一个。这不是这里的问题,尽管您已经说明了这些类是如何设计的。@VdesmedT他的代码不是很清楚。稍后可能会调用此构造函数导致NullReferenceException
。正在调用的构造函数是另一个。这不是这里的问题,尽管您已经说明了这些类是如何设计的。@VdesmedT他的代码不是很清楚。稍后可能会调用此构造函数以导致NullReferenceException
。
processorsForService = ProcessFactory.GetProcessors();
foreach(IProcess p in processorsForService)
{
p.ProcessTimer.Elapsed += new ElapsedEventHandler(IProcess_Timer_Elapsed);
}