反映未知的子类型

本文关键字:类型 未知 | 更新日期: 2023-09-27 18:13:30

我有一个类:

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 ) , ...);

由于Parent不包含孩子的详细信息,所以我不能:

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

是否有任何解决方案,设置孩子通过字符串,如:

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

还是别的什么?

反映未知的子类型

您考虑过在这里使用dynamic吗?这将使代码简单得多。

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

另外,是否存在不使用已知序列化引擎的原因?如果您只是简单地将对象与XML流序列化,那么有许多现有的解决方案可以使您的工作更轻松

  • 。Net XML序列化
  • .Net协议

为子类提供构造函数,然后通过第二个参数向Activator提供参数。CreateInstance,它接受构造函数参数作为参数对象[]:

 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" });