2009-11-26 101 views
2

我有一个文本框(Pname)和一个按钮的窗体窗体。 我有一个名称为Player的类没有构造函数。C#如何创建对象名称可变字符串

当用户在文本框内输入文本(例如John)并点击按钮时,系统将创建一个类名为Player的实例,其名称为John。

感谢, 周杰伦

+1

你的问题到底是什么?如何基于'String'对象中的值创建新对象? – mgbowen 2009-11-26 19:06:45

+3

一个没有构造函数的类是什么意思?你将如何能够实例化该类型的对象?即使使用反射,你仍然需要调用构造函数。 – 2009-11-26 19:10:32

+1

编译器将创建一个默认构造函数**,如果没有其他构造函数** – 2009-11-26 19:16:37

回答

3

你的问题不是很清楚,但我解释你想让你的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 
1

思考也许......

1

为什么用户关心的对象是内部命名?他永远不会使用它。

解决此问题的正确方法之一是将实例放置在Dictionary<String, Object>中,以便稍后以给定名称查找它。最终用户没有理由关心内部变量名称。

+1

我猜Jay不是指变量的名字,而是名字存储在变量中的对象 - 玩家的名字。 – 2009-11-26 19:15:28

+0

是的,我正在读它更像他认为c#是一种脚本语言,他希望变量本身有这个名字。 – Donnie 2009-11-26 19:30:12

3

如果根本没有构造函数,编译器将创建一个默认构造函数(不带参数)。您只需创建类Player p = new Player();的一个实例,然后将需要的名称的字符串分配给其属性或字段。编号: 见Konamiman的code example

0

的类别:

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... 
} 
+0

您好, 非常感谢所有的答案。 这是如何使用你的建议 - 我创建了Dictionary 和用过的字符串来存储用户输入的文本和新的对象。 我也知道动态创建pbject名是不可行的。 是的,或者我也可以在Player类中设置name属性。 谢谢, Jay – user219628 2009-11-30 19:04:28

0

Jay,

在C#中,除非类是静态的,否则为了启用类实例化,C#编译器会给出没有构造函数的类的公共默认构造函数。

所以,虽然你的类没有构造函数,但你仍然可以实例化它。

例如:Player myPlayer = new Player();。回到你的案例,你可以在你的Form类中声明一个类型为Player的变量,并将它实例化为上面的例子,或者声明变量并在Form的构造函数或Load事件中实例化它。

在按钮单击的事件处理程序中,然后设置Player实例的名称。

myPlayer.Name = Pname.Text; 

这取决于你需要什么,但是我认为每次点击按钮时新玩家都是很浪费的。

相关问题