由于糟糕的早期设计,我有许多控件(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,但它非常复杂,我必须指定许多其他选项,我不确定它是否能够做我想做的事。
谢谢!
答案 0 :(得分:0)
您是否尝试过使用OpCodes.Call来调用构造函数?我知道至少可以通过OpCodes.Call调用struct构造函数。