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

时间:2017-12-18 15:17:31

标签: c# winforms class inheritance

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

所以我的结构是这样的: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课程从import 'react-native'; import React from 'react'; import renderer from 'react-test-renderer'; import { shallow } from 'enzyme'; import { SignUp } from '../../src/pages'; describe('Testing SignUp component', () => { it('renders as expected', () => { const wrapper = shallow( <SignUp /> ); expect(wrapper).toMatchSnapshot(); }); }); 转移到npm test之前没有遇到任何问题,我怀疑问题是因为我通过了两次,但不明白为什么会这样做一个问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:6)

您的代码不正确:您应该分配this.mainWindow而不是参数mainWindow。它会将字段中的默认值null分配给参数。 (在Maxflow类中)

class MaxFlow {
   private MainWindow mainWindow;

   public MaxFlow(MainWindow mainWindow) {
       // mainWindow = this.mainWindow;   <-----
       // should be:
       this.mainWindow = mainWindow;
   } 
像DavidG指出的那样。更好的命名对话可以防止出现这些错误:

class MaxFlow 
{
   private MainWindow _mainWindow;

   public MaxFlow(MainWindow mainWindow) 
   {
       _mainWindow = mainWindow;
   } 
}