C# 如何从字符串变量创建对象名称

问题描述 投票:0回答:6

我有一个带有一个文本框(Pname)和一个按钮的窗口窗体。 我有一个名为 Player 的类,没有构造函数。

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

c# reflection
6个回答
3
投票

您的问题不是很清楚,但我解释为您希望您的 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

3
投票

如果根本没有构造函数,编译器将创建一个默认构造函数(不带参数)。您只需创建类的实例

Player p = new Player();
,然后将您需要的名称字符串分配给其属性或字段。

请参阅 Konamiman 的 代码示例


1
投票

也许反思...


1
投票

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

解决此问题的正确方法之一是将实例放置在

Dictionary<String, Object>
中,以便您稍后可以通过给定名称查找它。最终用户没有理由关心内部变量名称是什么。


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
投票

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

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

例如:

Player myPlayer = new Player();

回到你的例子,你可以在 Form 类中声明一个 Player 类型的变量并实例化它,如上面的示例,或者只是声明该变量并在 Form 的构造函数或 Load 事件中实例化它。

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

myPlayer.Name = Pname.Text;

这取决于您的需要,但我认为每次单击按钮时都更新播放器有点浪费。

© www.soinside.com 2019 - 2024. All rights reserved.