C#反映未知的孩子类型

时间:2011-11-04 20:56:10

标签: c# generics

我有一个班级:

public class Chid1 : Parent{
    public string var1{get;set;}
    public string var2{get;set;}
}

public class Chid2 : Parent{
    public string var3{get;set;}
    public string var4{get;set;}
}

我正在从xml文件中收集一些数据,我需要设置这些类。

所以这就是我现在可以做的事情:

string child = "Chid1";//from the xml
Parent instance = (Parent)Activator.CreateInstance(Type.GetType(child ) , ...);

由于家长没有关于孩子的详细信息,我不能这样做:

instance.var1 = "Some text from the XML";

这里是否有通过以下字符串设置子节点的解决方案:

Activator.SetParan(instance,"var1" , "Some text from the XML");

还是其他什么?

2 个答案:

答案 0 :(得分:4)

您是否考虑过在此使用dynamic?它会使代码更简单。

dynamic instance = Activator.CreateInstance(Type.GetType(child ) , ...);
instance.var1 = "some text from the XML";

此外,您还没有使用已知序列化引擎的原因。如果您只是将对象序列化为XML流,那么有许多现有的解决方案可以让您的生活更轻松

答案 1 :(得分:0)

为子类提供一个构造函数,然后通过第二个参数将参数提供给Activator.CreateInstance,它将构造函数args作为params对象[]:

 public class Child1 : Parent
 {     
       public Child1(string _var1, string _var2) 
       {
            this.var1 = _var1;
            this.var2 = _var2
       }

       public string var1 { get; set;}     
       public string var2 { get; set;} 
 }

 Activator.CreateInstance(typeof(Child1), new object[] { "var1", "var2" });