我有一个带有一个文本框(Pname)和一个按钮的窗口窗体。 我有一个名为 Player 的类,没有构造函数。
当用户在文本框中输入文本(例如 John)并单击按钮时,系统将创建一个 Player 类的实例,对象名称为 John。
您的问题不是很清楚,但我解释为您希望您的 Player 类存储一个名称,该名称将由用户提供。
在这种情况下,您需要向您的 Player 类添加一个名为
Name
的字符串类型属性,并且当用户单击该按钮时,您将创建一个新的 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
如果根本没有构造函数,编译器将创建一个默认构造函数(不带参数)。您只需创建类的实例
Player p = new Player();
,然后将您需要的名称字符串分配给其属性或字段。
请参阅 Konamiman 的 代码示例。
也许反思...
为什么用户关心对象内部的命名?他永远不会使用它。
解决此问题的正确方法之一是将实例放置在
Dictionary<String, Object>
中,以便您稍后可以通过给定名称查找它。最终用户没有理由关心内部变量名称是什么。
班级:
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...
}
在 C# 中,除非类是静态的,否则 C# 编译器会为没有构造函数的类提供公共默认构造函数,以启用类实例化。
所以,虽然你的类没有构造函数,但你仍然可以实例化它。
例如:
Player myPlayer = new Player();
。
回到你的例子,你可以在 Form 类中声明一个 Player 类型的变量并实例化它,如上面的示例,或者只是声明该变量并在 Form 的构造函数或 Load 事件中实例化它。
在按钮单击的事件处理程序中,您可以设置 Player 实例的名称。
myPlayer.Name = Pname.Text;
这取决于您的需要,但我认为每次单击按钮时都更新播放器有点浪费。