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