class Person
{
//Default Constructor
public Person()
{
name_private = "";
attr_private = 0.0;
}
//Overloaded Constructor
public Person(string name, double attr)
{
name_private = name;
attr_private = attr;
}
//Member Variables
private string name_private;
private double attr_private;
}
/////////////////////////////////////////////// ////////////////////////////
private void createPersonBox_Click(object sender, EventArgs e)
{
Object obj = Activator.CreateInstance<Person>();
//Person person_1 = new Person();
}
/////////////////////////////////////////////// ///////////////////////////
当有人按下“创建人员”按钮时,如何创建人员类的实例。不是将类的实例命名为person_1这样的通用名称,而是希望实例的名称是顶部文本框中的文本。我已经阅读了关于Activator.CreateInstance的MSDN文章,我已经确定这是实现这一目标的最佳方法。但是我不知道如何正确地超载它。我需要能够引用类的实例作为人的名称而不是obj。
简洁就是这里的目标。
答案 0 :(得分:0)
如果您希望维护所有创建的“人员”,您需要将它们粘贴在某种形式的容器中。在您的表单类中放置一个字段,如下所示。
private List _persons = new List();
然后,当您处理按钮单击时,您可以将动态创建的人员添加到此集合中。问题有点困难,因为你没有为你想要完成的事情提供太多的背景。
_persons.add(Activator.CreateInstance());
答案 1 :(得分:0)
据我所知,您希望存储每个创建的人。正如你所说,你不能将它存储在person1
中。
您应该拥有已创建人员的列表并将其存储在其中。无需使用Activator.CreateInstance()
List<Person> CreatedPersons = new List<Person>();
private void createPersonBox_Click(object sender, EventArgs e)
{
var tempPerson = new Person(); //No need to use Activator.CreateInstance<Person>();
// Fill the tempPerson with form text boxes.
createdPersons.Add(tempPerson);
}
Activator.CreateInstance
对于某些其他方案非常有用,其中创建对象的类型未修复,您希望将其作为参数传递。例如,在以下示例中,您要创建type
的实例:
Type type;
type = GetCreatingType(); // Some algorithm to find out what type to create;
var instance = new type(); // This doesn't work
var instance = Activator.CreateInstance(type); // But this works.