Как написать конструктор, который принимает один аргумент? - PullRequest
0 голосов
/ 23 ноября 2018

Я создаю что-то вроде программы для киосков, где вы заказываете еду с помощью оконных форм.Я должен создать класс Toppings, где он содержит три поля, которые являются массивами.

  • ToppingList в виде массива bool
  • ToppingNames в виде массива строк
  • ToppingPrices в виде массива double

Инструкциискажем, что конструктор должен принимать один аргумент: длину всех трех массивов, которые являются параллельными массивами.

Я не уверен, как это сделать.Я исследовал и понимаю, как работают параллельные массивы, но я не знаю, как реализовать и получить все три длины в одном аргументе.Я не уверен, правильно ли я это делаю?

Это то, что у меня есть до сих пор:

namespace DeliAndPizza
{
    class Toppings
    {
        bool[] ToppingList = { false, false, false, false, false, false, false, false, false, false, false, false };
        string[] ToppingNames = { "Bacon", "Extra Cheese", "Hot Peppers", "Mayo", "Mushrooms", "Oil", "Onion", "Onion", "Oregano", "Peppers", "Sausage" };
        double[] ToppingPrices = {1.00, 1.50, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 0.00, 1.00, 1.00, 0.00 };

        public Toppings()
        {
        }

        public Toppings(bool[] list, string[] name, double[] price)
        {
            this.ToppingList = list;
            this.ToppingNames = name;
            this.ToppingPrices = price;
        }
    }
}

Вот диаграмма данного класса:

click here

1 Ответ

0 голосов
/ 23 ноября 2018

Предполагая, что все массивы имеют одинаковую длину, вам просто нужно передать параметр length в качестве единственного аргумента конструктору и инициализировать длины массивов там, а не определять длину, в которой вы определили поля:

namespace DeliAndPizza
{
    class Toppings
    {
        bool[] ToppingList;
        string[] ToppingNames;
        double[] ToppingPrices;

        public Toppings(): this(12) {} //default length is 12
        public Toppings(int length)
        {
            ToppingList = new bool[length];
            ToppingNames = new string[length];
            ToppingPrices = new double[length];
        }

        public Toppings(bool[] list, string[] name, double[] price)
        {
            this.ToppingList = list;
            this.ToppingNames = name;
            this.ToppingPrices = price;
        }
    }
}

Примечание к одной стороне;в настоящее время вы используете такие определения, как bool[] ToppingList;.Если вы хотите иметь доступ к этому значению в экземпляре класса (а не только внутри класса), вам нужно сделать его общедоступным / в идеале преобразовать его в свойства, например:

public bool[] ToppingList {get;set;}

Если вы не хотите, чтобы они были доступны извне, соглашение о присвоении имен было бы использовать строчную первую букву;например,

bool[] toppingList;

Вот документация MS по стандартам именования .

Официальное руководство определяет только внешне видимые имена;поэтому частные поля, определенные в вашем классе, не охватываются приведенным выше документом.Однако существуют соглашения .

...