将构造函数转换为方法

时间:2012-08-23 16:46:15

标签: c# dynamic methods constructor runtime

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

MyControlTextBox mct = new MyControlTextBox();



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

mct.AddMethod(newMethod);

OR

mct.getType().GetMethod("methodWhichBodyIWannaChange") = newMethod;

然后

mct.getType().GetMethod("newMethod").Invoke(newData...);

有可能实现这样的目标吗? 我可以轻松地将任何新的虚拟方法或委托添加到MyType中,然后如果可能的话,可以使用我的新方法更改它,并且比在运行实例中添加新方法更“真实”。 我正在寻找MethodBuilder,但它非常复杂,我必须指定许多其他选项,我不确定它是否能够做我想做的事。

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用OpCodes.Call来调用构造函数?我知道至少可以通过OpCodes.Call调用struct构造函数。