由于糟糕的早期设计,我有很多控件(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);
或者
mct.getType().GetMethod("methodWhichBodyIWannaChange") = newMethod;
接着
mct.getType().GetMethod("newMethod").Invoke(newData...);
有可能实现这样的目标吗?我可以轻松地将任何新的虚拟方法或委托添加到 MyType 中,然后如果可能的话,用我的新方法对其进行更改,并且它比将新方法添加到正在运行的实例中“更真实”。我在看 MethodBuilder 但它非常复杂,我必须指定许多其他选项,我不确定它是否能够做我想做的事。
谢谢!