2016-09-29 2 views
0

Я работаю в Unity, но, я думаю, это же относится и к C# вообще.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 
      } 
     } 
    } 

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

+1

Вы имеете в виду 'defaultKeyBinding [я] = новый KeyboardInput (строка, KeyCode) '? – ChrisK

+0

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

+0

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

ответ

0

Линия

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); 
} 
+0

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

0

Нечто подобное позволит вам поставить свои объекты в массиве без использования для цикла:

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

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

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

Благодарим вас за ответ. Я не ищу, чтобы обойти цикл for. но ваш ответ был полезен! –

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

Пожалуйста, объясните свой ответ, связанный с вопросом. Не просто отправляйте код. – MattD