如何动态创建类的对象?

时间:2017-03-21 08:20:54

标签: c# .net

我有一个班级MyClass

public class OPCTag
{
    public string tagName;
    public string tagOvationMatch;
    public string tagValue;
}

我知道如何手动创建类的对象,但是如何动态创建此类的对象?例如,要在for周期创建它:

for (int i=0; i< 10; i++)
{
    //CREATE OBJECT DYNAMICALLY
}

为了得到10个MyClass对象。

4 个答案:

答案 0 :(得分:2)

如果你的意思是简单地创建一个总是具有相同类型的类的实例,那么这对你来说已经足够了:

List<OPCTag> list = new List<OPCTag>();
for (int i = 0; i < 10; i++)
{
    // Create object of OPCTag
    var obj = new OPCTag();

    // Set value for 'tagName' property 
    obj.tagName = "New value of 'tagName'";

    // Get value of 'tagName' property
    var tagNameValue = obj.tagName;

    list.Add(obj);
}

// Set value of 4th element 'tagName' property
list[4].tagName = "This is 4th element";

// Get value of 4th element 'tagName' property
var valueOf4thTag = list[4].tagName;

但是如果你想用未知类型动态创建类,你应该使用反射:

// Type namespace and name
string typeName = typeof(OPCTag).FullName; // MyNamespace.OPCTag

List<Object> list = new List<Object>();
for (int i = 0; i < 10; i++)
{
    // Create object dynamically from string type
    var obj = Type.GetType(typeName).GetConstructor(new Type[0]).Invoke(new object[0]);

    // Set value for 'tagName' property
    obj.GetType().GetProperty("tagName").SetValue(obj, "New value for 'tagName'");

    // Get value from 'tagName' property
    string tagNameValue = (string)obj.GetType().GetProperty("tagName").GetValue(obj);

    list.Add(obj);
}

答案 1 :(得分:1)

您可以在循环中动态添加对象,但必须创建列表。 你可以这样写:

List<OPCTag> lstTag = new List<OPCTag>();

for(int i = 0; i<10 ; i++)
{
     lstTag.Add(new OPCTag());
}

答案 2 :(得分:1)

要创建10个MyClass对象,您可以这样做,例如:

List<MyClass> list = new List<MyClass>();
for (int i = 0; i < 10; i++)
{
    list.Add(new MyClass());    
}

虽然它不是&#34;动态创建对象&#34;,只是创建实例。

对于Dictionary,您应指定键和值。它们可以是任何类型,而不仅仅是int(通常是string)。

Dictionary<int, MyClass> dictionary = new Dictionary<int, MyClass>();
for (int i = 0; i < 10; i++)
{
    dictionary.Add(i, new MyClass());
}

答案 3 :(得分:1)

//你的班级

public class OPCTag
{
    public string tagName;
    public string tagOvationMatch;
    public string tagValue;
}

//初始化OPCTag类型的新列表对象

List<OPCTag> lstTag = new List<OPCTag>();

for(int i = 0; i<10 ; i++)
{
     lstTag.Add(new OPCTag());
}

//要根据索引从lstTag读取值,我在列表中指定0索引/第一个值。

var firstIndexTagname =  lstTag[0].tagName;
var firstIndexTagOvationMatch = lstTag[0].tagOvationMatch;
var firstIndexTagValue =  lstTag[0].tagValue;
相关问题