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);

また

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

その後

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

このようなことを達成することは可能ですか?新しい仮想メソッドまたはデリゲートを MyType に簡単に追加し、可能であれば、実行中のインスタンスに新しいメソッドを追加するよりも、新しいメソッドとその「より現実的な」方法で変更できます。私は MethodBuilder を探していましたが、非常に複雑で、他の多くのオプションを指定する必要があり、自分がやりたいことができるかどうかわかりません。

ありがとう!

4

1 に答える 1

0

OpCodes.Callを使用してコンストラクターを呼び出してみましたか?少なくともstructコンストラクターはOpCodes.Callを介して呼び出すことができることを私は知っています。

于 2012-08-23T17:29:45.400 に答える