C # новый массив. Класс с конструктором

#c# #arrays #class #constructor #instance

#c# #массивы #класс #конструктор #экземпляр

Вопрос:

Я работаю в Unity, но, думаю, то же самое относится и к C # в целом.

это класс, который я создал:

     public class KeyboardInput
    {
        private string name;
        private KeyCode btn;

        public KeyboardInput(string buttonName, KeyCode button)
        {
            name = buttonName;
            btn = button;
        }
    }
  

Когда я создаю экземпляр класса, если я не укажу значения, требуемые конструктором, я получу сообщение об ошибке.

Теперь я хочу создать массив класса, и я хочу указать значения, но как?

Кажется, это работает нормально без указания значений

     public class InputController
    {
        private KeyboardInput[] defaultKeyBinding = new KeyboardInput[4];

        public InputController()
        {
            for (int i = 0; i < defaultKeyBinding.Length; i  )
            {
                //Something inside here
            }
        }
    }
  

Я могу настроить код, чтобы иметь возможность устанавливать значения внутри цикла for, но мне очень любопытно узнать, есть ли способ!

Комментарии:

1. Ты имеешь в виду defaultKeyBinding[i] = new KeyboardInput(string, KeyCode) ?

2. Вы должны создать новый экземпляр каждого элемента массива KeyboardInput.

3. Я в замешательстве — вы хотите создавать экземпляры при инициализации массива или в конструкторе? Откуда берутся значения, необходимые конструктору? Какую ошибку вы получаете сейчас?

Ответ №1:

Строка

 private KeyboardInput[] defaultKeyBinding = new KeyboardInput[4];
  

просто объявляет массив, пока ничего не инициализируется. В вашем цикле вы, вероятно, хотите что-то вроде этого.

 for (int i = 0; i < defaultKeyBinding.Length; i  )
{
    //should look something like this
    defaultKeyBinding[i] = new KeyboardInput("Ayy", KeyCode.A);
}
  

Комментарии:

1. Спасибо. Именно то, что я искал!

Ответ №2:

Что-то вроде этого позволит вам помещать ваши объекты в массив без использования цикла for:

 KeyboardInput[] defaultKeyBinding = new KeyboardInput[4];
defaultKeyBinding[0] = new KeyboardInput("someName", KeyCode.A);
defaultKeyBinding[1] = new KeyboardInput("someName2", KeyCode.B);
  

Однако, чтобы избежать получения ошибки, которая возникает, когда вы не указываете значения для параметров в конструкторе, вы можете использовать необязательные значения. Смотрите пример на этой странице. В вашем случае я не знаю, имеет ли смысл присваивать этим параметрам значения по умолчанию, но это будет выглядеть примерно так:

 public KeyboardInput(string buttonName = "defaultButtonName", KeyCode button = KeyCode.A)
{
  name = buttonName;
  btn = button;
}
  

Комментарии:

1. Спасибо за ответ. Я не собираюсь обходить цикл for . но ваш ответ был полезен!

Ответ №3:

   KeyboardInput[] array = new KeyboardInput[]
  {
    new KeyboardInput("a",b),
    new KeyboardInput("a", b),
    new KeyboardInput("a", b)
  }
  

Комментарии:

1. Пожалуйста, объясните свой ответ, поскольку он относится к вопросу. Не просто отправляйте код.