如何使用参数初始化类

时间:2019-04-29 10:55:16

标签: c# constructor

我正在使用多个类,而我的“ ControllerCLass”需要初始化一个“ ListManager”类。由于某些参数在ListManager中仅使用一次,在ControllerClass中多次使用,所以我想我将在Controller中对其进行初始化并将其提供给Manager。

我显然可以对这些东西进行硬编码,但我只想将其放在一个位置,因此只需5次击键即可更改,而不希望在多个类中进行查找。

我的控制器或其相关部分:

    public class ControllerClass
    {
        int growthRate = 50;
        int startLength = 500;
        ListManager listManager = new ListManager(startLength, growthRate);

        /* Starts the Gui */
        public void RunProgram()
        {
            Application app = new Application();
            app.Run(new MainWindow(this)); 
        }
...}

然后使用ListManager:

    public class ListManager
    {
        int _startLength;
        int _growthRate;

        public ListManager(int startLength, int growthRate)
        {
            _startLength = startLength;
            _growthRate = growthRate;
        }
...}


我想要的是它能正常工作,如果我更换

ListManager listManager = new ListManager(startLength, growthRate);

使用

ListManager listManager = new ListManager(30, 30);

它没有任何问题。但是有了它,它只能告诉我无法使用字段初始化程序引用非静态字段。尽管必须这样做,但因为我一直都这样做,所以我不可能找出问题所在。

1 个答案:

答案 0 :(得分:2)

使用声明初始化字段时,不能使用其他字段。

您可以将初始化移动到构造函数中,然后在其中访问其他字段:

public class ControllerClass
{
    int growthRate = 50;
    int startLength = 500;
    ListManager listManager;

    public ControllerClass()
    {
        this.listManager = new ListManager(this.startLength, this.growthRate);
    }

    ...
}

或重复文字:

public class ControllerClass
{
    int growthRate = 50;
    int startLength = 500;
    ListManager listManager = new ListManager(50, 500);

    ...
}