Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建从通过反射获得的一组类型中选择的特定类型的对象_C#_Winforms_Reflection - Fatal编程技术网

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

C# 创建从通过反射获得的一组类型中选择的特定类型的对象,c#,winforms,reflection,C#,Winforms,Reflection,我本质上是在为用户编写一个界面来创建不同类的实例。我使用winforms,因此如果代码说类具有int类型的属性,它会提供一个numbox、bool的复选框等。表单是在运行时生成的,显示的控件取决于所反映的类中属性的数量和类型 我需要获取用户输入的值,并创建一个属性设置为这些值的对象。问题是每个对象的属性数量和类型都不同。我想通过某种方式实现以下目标: Object o = new Object(property1, property2) 其中,对象将替换为当前使用的任何类,参数将替换为winf

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

我需要获取用户输入的值,并创建一个属性设置为这些值的对象。问题是每个对象的属性数量和类型都不同。我想通过某种方式实现以下目标:

Object o = new Object(property1, property2)
其中,对象将替换为当前使用的任何类,参数将替换为winform控件中相应数量的值

该类可以是的类型被限制为有限列表,并且每个类都有一个上述样式的构造函数。所有类都至少要设置一个属性。

List parms=new List();
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();
添加参数(属性1); 添加参数(属性2); ObjectHandle objHandle=Activator.CreateInstance(“assemblyName”、“className”、false、null、null、parms.ToArray()、null、null); object workingObject=objHandle.Unwrap();
用程序集的名称替换“assemblyName”,用类的完全限定名替换“className”。 这将使您能够灵活地创建具有任意数量构造函数参数的任何类的实例。

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

  • 所需的类/控件类型(正如您提到的int或bool,只要您的工厂类理解此逻辑,任何事情都可以) i、 它可以通过反射或简单地实例化类来创建所需的控件
  • 为了传递属性信息,我建议使用string、object类型的字典 .string将属性名称存储为键,对象存储为值
  • 要指定属性值,可以循环使用此字典 并使用反射指定值,如下面的示例所示

    Type=control.GetType()

    PropertyInfo prop=type.GetProperty(“propertyName”)

    prop.SetValue(控件,propertyValue,null)


    如果我的理解不正确,请在评论中添加更多关于您问题的信息,这样我的构造函数就不会像我希望的那样工作了(这不是我的代码,所以我无法更改它们),但是基于我得到的错误,如果它们按预期工作,您的答案将是完美的。