2012-08-23 95 views
0

由于不好的早期设计,我有许多通过调用构造函数填充数据的控件(typeof(MyControl))(填充功能是在构造函数中写入,而不是分离方法)。 现在我需要更新这些控件中的数据,但我不想处理当前的控件实例,然后再次创建它仅用于填充新数据。由于很多控件,我也不想将任何抽象方法FillWithData添加到MyControl中,然后在每个子控件中实现它。 我的目标是动态创建与构造函数具有相同主体的方法(也许没有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,但它的相当复杂,我必须指定许多其他选项,我不知道它是否有能力做我想做的事。

谢谢!

+4

您是否考虑过重新设计您的代码,而不是花费很长的时间来完成当前令人讨厌的状态?您尝试使用的方法听起来像是维护噩梦。 –

回答

0

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

相关问题