#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. Пожалуйста, объясните свой ответ, поскольку он относится к вопросу. Не просто отправляйте код.