Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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#_Dynamic_Methods_Constructor_Runtime - Fatal编程技术网

C# 将构造函数转换为方法

C# 将构造函数转换为方法,c#,dynamic,methods,constructor,runtime,C#,Dynamic,Methods,Constructor,Runtime,由于早期设计不好,我有许多控件(typeof(MyControl)通过调用构造函数填充数据(填充功能是在构造函数中编写的,而不是在单独的方法中编写的)。 现在我需要更新这些控件中的数据,但我不想处理当前的控件实例,然后再次创建它,只是为了填充新数据。由于有很多控件,我也不想在MyControl中添加任何抽象方法FillWithData,然后在每个子控件中实现它。 我的目标是动态创建与构造函数具有相同主体的方法(可能没有InitializeComponents()方法-但这并不重要)和相同的参数-

由于早期设计不好,我有许多控件(typeof(
MyControl
)通过调用构造函数填充数据(填充功能是在构造函数中编写的,而不是在单独的方法中编写的)。 现在我需要更新这些控件中的数据,但我不想处理当前的控件实例,然后再次创建它,只是为了填充新数据。由于有很多控件,我也不想在MyControl中添加任何抽象方法FillWithData,然后在每个子控件中实现它。 我的目标是动态创建与构造函数具有相同主体的方法(可能没有InitializeComponents()方法-但这并不重要)和相同的参数-然后我将“添加”此新方法到MyControl的运行实例中,并使用此新方法(而不是构造函数)向此控件填充新数据。 如果可能的话,最好制作以下产品:

MyControlTextBox mct = new MyControlTextBox();



MethodBuilder newMethod = new MethodBuilder("newMethod");
newMethod.SetParameters(constructorParameters
newMethod.CreateBody(mct.getType().GetMethodBody());

mct.AddMethod(newMethod);

然后

mct.getType().GetMethod("newMethod").Invoke(newData...);
有可能实现这样的目标吗? 我可以很容易地将任何新的虚拟方法或委托添加到MyType中,如果可能的话,可以使用我的新方法和它的“比将新方法添加到正在运行的实例中更真实”来更改它。 我一直在寻找MethodBuilder,但它非常复杂,我必须指定许多其他选项,我不确定它是否能够满足我的需要


谢谢

您是否尝试过使用操作码。调用调用构造函数?我知道至少可以通过操作码调用结构构造函数。调用。

您是否考虑过重新设计代码,而不是花费大量精力来解决当前的糟糕状态?您尝试使用的方法听起来像一场维护噩梦。
mct.getType().GetMethod("newMethod").Invoke(newData...);