C # Как создать имя объекта из строки переменной - PullRequest
2 голосов
/ 26 ноября 2009

У меня есть форма окна с одним текстовым полем (Pname) и одной кнопкой. У меня есть один класс по имени Player без конструктора.

Когда пользователь вводит текст в текстовое поле (например, Джон) и нажимает кнопку, система создаст и экземпляр класса Player с именем объекта как Джон.

Спасибо, Джей

Ответы [ 6 ]

3 голосов
/ 26 ноября 2009

Ваш вопрос не очень понятен, но я понимаю, что вы хотите, чтобы ваш класс Player сохранял имя, которое будет предоставлено пользователем.

В этом случае вам нужно добавить свойство строкового типа с именем Name в ваш класс Player, и когда пользователь нажимает кнопку, вы создаете новый экземпляр Player (вы можете это сделать, даже если вы явно не указали определить конструктор) и установить свойство из значения текстового поля. Например, вы можете определить класс следующим образом:

class Player
{
    public string Name {get;set;}
    //Other members (if any)
}

и в обработчике событий для нажатия кнопки (при условии, что ваше текстовое поле имеет имя theTextBox):

var player = new Player();
player.Name = theTextBox.Text;
//Do whatever you need with the instance of Player
3 голосов
/ 26 ноября 2009

Если конструктора нет вообще, компилятор создаст конструктор по умолчанию (без параметров). Вам нужно всего лишь создать экземпляр вашего класса Player p = new Player();, а затем присвоить нужное имя строки его свойству или полю.

EDIT: См. пример кода от Konamiman.

1 голос
/ 26 ноября 2009

Почему пользователю важно, какой объект назван внутри? Он никогда не собирается использовать это.

Один из правильных способов сделать это - поместить экземпляр в Dictionary<String, Object>, чтобы вы могли найти его позже по заданному имени. Конечному пользователю не нужно заботиться о том, какое имя имеет внутренняя переменная.

1 голос
/ 26 ноября 2009

Отражение может быть ...

0 голосов
/ 26 ноября 2009

Jay,

В C #, если класс не является статическим, классы без конструкторов получают открытый конструктор по умолчанию компилятором C #, чтобы включить создание экземпляров класса.

Итак, хотя у вашего класса нет конструктора, вы все равно можете создать его экземпляр.

Например: Player myPlayer = new Player();.

Возвращаясь к вашему случаю, вы можете объявить переменную типа Player в своем классе Form и создать ее экземпляр как в приведенном выше примере, или просто объявить переменную и создать ее экземпляр в конструкторе Form или в событии Load.

В обработчике события для нажатия кнопки вы затем задаете имя экземпляра Player.

myPlayer.Name = Pname.Text;

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

0 голосов
/ 26 ноября 2009

Класс:

public class Player
{
    public string Name { get; set;}
}

Событие нажатия кнопки:

private void button1_Click(object sender, EventArgs e)
{
    var player = new Player() {Name = Pname.Text};
    //do some thing with player...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...