将类引用传递给另一个不起作用的类

问题描述 投票:-1回答:1

我有一个相当复杂的应用程序,所以我决定组织一些代码,并且我对主类的引用不再有问题了。我已经有了一个包含类的结构,但它们都是主类的属性,并且没有其他类属性需要引用主类。

所以我的结构是这样的: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之前我没有遇到任何问题,我怀疑问题是因为我传了两次但是不明白为什么这可能是个问题。

任何帮助,将不胜感激。

c# winforms class inheritance
1个回答
6
投票

您的代码不正确:您应该分配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;
   } 
}
© www.soinside.com 2019 - 2024. All rights reserved.