【问题标题】:How do I initialise a Class with parameters [duplicate]如何使用参数初始化类[重复]
【发布时间】:2019-04-29 10:55:16
【问题描述】:

我正在使用多个类,我的“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);

它没有任何问题。但是有了它,它只是告诉我我不能用字段初始化器引用非静态字段。这一定是可能的,但因为我一直这样做,所以我无法找出这里的问题。

【问题讨论】:

  • 如果growthRatestartLength 的值没有改变(在应用程序运行期间),为什么不将它们声明为const
  • @Corak 我可能想稍后添加一个选项,用户可以将这两个更改为他的喜好

标签: c# constructor


【解决方案1】:

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

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

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);

    ...
}

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多