2012-08-23 96 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調用結構體構造函數。

相關問題