如何在用户按下按钮时使用Activator.CreateInstance创建类的实例

时间:2014-01-25 05:09:22

标签: c# winforms class oop activator

enter image description here

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。

简洁就是这里的目标。

2 个答案:

答案 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.