我有一个相当复杂的应用程序,所以我决定组织一些代码,并且我对主类的引用不再有问题了。我已经有了一个包含类的结构,但它们都是主类的属性,并且没有其他类属性需要引用主类。
所以我的结构是这样的:Main Class -> Class1, Class2, Class3 etc.
重组后,我创建了一个类似于此的结构:
Main Class -> (Class1 -> Class12, Class13), Class2, Class3 etc.
我以前把所有引用传递给主类都很好,但是现在我有一个更深层的结构,我得到了主要的class null
错误。
与此特定错误相关的结构如下:
MainWindow: Form -> MaxFlow (algorithm) -> LabelNodes (a part of that algorithm)
结构非常简单,因为我的大部分代码与问题完全无关。
首先,我有MainWindow
课程。
public partial class MainWindow : Form {
private MaxFlow maxFlow; // Algorithm
internal MaxFlow MaxFlow { get => maxFlow; set => maxFlow = value; }
public MainWindow() {
InitializeComponent();
maxFlow = new MaxFlow(mainWindow: this);
}
那么Maxflow
类:
class MaxFlow {
private MainWindow mainWindow;
public MaxFlow(MainWindow mainWindow) {
mainWindow = this.mainWindow;
}
然后是最后一个带节点的类:
class LabelNodes {
private MainWindow mainWindow;
public LabelNodes(MainWindow mainWindow) {
this.mainWindow = mainWindow;
}
public AddNewNodeLabel() {
//…
// THIS PART THROWS THE ERROR (mainWindow equal to null):
Label newLabel = new Label {
Location = mainWindow.LastClickLocation,
Name = ”…”
};
//…
}
我尝试设置断点并发现MainWindow
类的引用在将它传递给null
类之前已经是LabelNodes
,它在null
类中作为MaxFlow
传递。
因为在将LabelNodes
类从MainWindow
转移到MaxFlow
之前我没有遇到任何问题,我怀疑问题是因为我传了两次但是不明白为什么这可能是个问题。
任何帮助,将不胜感激。
您的代码不正确:您应该分配this.mainWindow
而不是参数mainWindow。它会将字段中的默认值null分配给参数。 (在Maxflow类中)
class MaxFlow {
private MainWindow mainWindow;
public MaxFlow(MainWindow mainWindow) {
// mainWindow = this.mainWindow; <-----
// should be:
this.mainWindow = mainWindow;
}
就像大卫G指出的那样。更好的命名约定可以防止出现这些错误:
class MaxFlow
{
private MainWindow _mainWindow;
public MaxFlow(MainWindow mainWindow)
{
_mainWindow = mainWindow;
}
}