为了解释我的问题,我制作了这段代码。
应用程序将运行类control
,然后从那里创建另外两个类serial
和UIcontrol
的新实例。
在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
}
答案 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();
}