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);
                }