类之间的错误

时间:2014-03-03 14:30:18

标签: c# oop

为了解释我的问题,我制作了这段代码。

应用程序将运行类control,然后从那里创建另外两个类serialUIcontrol的新实例。

UI control中,函数将调用control中的函数,该函数将调用serial中的函数,该函数将调用control中的函数,该函数将调用UIcontrol中的函数{1}}这将做其他事情。

我知道这很疯狂,但我需要这个功能。

public class control // My application will enter here
{
    private serial serial_;
    private UIcontrol UIcontrol_;

    public control()
    {
        serial_ = new serial(this);
        UIcontrol_ = new UIcontrol(this);
    }

    public void controlToGUI()
    {
        UIcontrol_.stopHere();
    }

    public void controlToSerial()
    {
        serial_.serialToControl();
    }
}

public class UIcontrol
{
    private static control myParent;

    public UIcontrol(control parent)
    {
        myParent = parent;
        UItoControl();
    }

    public void UItoControl()
    {
        myParent.controlToSerial();
    }

    public void stopHere()
    {
        int i = 2;
    }
}

public class serial
{
    private static control myParent;

    public serial(control parent)
    {
        myParent = parent;
    }

    public void serialToControl()
    {
        myParent.controlToGUI();
    }
}

代码到达时我收到错误An unhandled exception of type 'System.NullReferenceException' occurred in Test App.exe

    public void controlToGUI()
    {
        UIcontrol_.stopHere(); // This line gives me the error
    }

1 个答案:

答案 0 :(得分:2)

因为:UIcontrol_ = new UIcontrol(this);没有完成执行,即UIcontrol_仍为空。 这就是为什么: 在分配“new UIcontrol(this);”之前到UIcontrol_它需要完成初始化新对象,但它没有,因为构造函数仍在调用其他函数但没有完成。 你可以做的是从UIcontrol构造函数中删除UItoControl();方法调用,如下所示:

 public UIcontrol(control parent)
{
    myParent = parent;
}

并在初始化UIcontrol_之后调用该方法:如下所示:

public control()
{
    serial_ = new serial(this);
    UIcontrol_ = new UIcontrol(this);
    UIcontrol_.UItoControl();
}