创建从通过反射获得的一组类型中选择的特定类型的对象

时间:2014-08-29 18:31:42

标签: c# winforms reflection

我实际上是为用户编写接口来创建不同类的实例。我正在使用winforms,以便如果代码说类具有int类型的属性,它提供了一个numbox,bool的复选框等。表单在运行时生成,显示的控件取决于数量和类型正在反映的类中的属性。

我需要获取用户输入的值并创建一个对象,其属性设置为这些值。问题是每个对象的属性数量和类型不同。我想要的是一些方法来做到以下几点:

Object o = new Object(property1, property2)

其中Object将被当前正在使用的任何类替换,并且参数将以适当数量的winform控件中的值替换。

类的类型限于有限列表,每个类都有一个上面样式的构造函数。所有课程都至少要设置一个属性。

2 个答案:

答案 0 :(得分:0)

List<object> parms = new List<object>();
parms.Add(property1);
parms.Add(property2);

ObjectHandle objHandle = Activator.CreateInstance("assemblyName", "className", false, null, null, parms.ToArray(), null, null );

object workingObject = objHandle.Unwrap();

将“assemblyName”替换为程序集的名称,将“className”替换为类的完全限定名称。 这应该为您提供灵活性,可以使用任意数量的构造函数参数创建任何类的实例。

答案 1 :(得分:0)

据我所知, 您需要有一个工厂类来创建和分配属性 以下信息可能有所帮助 要使用工厂类方法,您需要传递以下信息

  1. 需要的类/控件的类型(正如你提到的int或bool,只要你的工厂类理解这个逻辑,任何事情都可以) 即它可以通过反射或简单地实例化类
  2. 来创建所需的控制
  3. 用于传递属性信息我建议有一个字符串类型字符串,对象 .string将属性名称存储为键,将Object作为其值
  4. 存储

    用于分配属性值,循环遍历此字典 并使用反射分配值,如下面的示例所示

      

    Type type = control.GetType();

         

    PropertyInfo prop = type.GetProperty(“propertyName”);

         

    prop.SetValue(control,propertyValue,null);

    如果我的理解不正确,请在评论中添加有关您问题的更多信息