我正在嘗試設置C#代碼以自動爲由IronPython腳本調用且尚未明確實現的方法創建虛擬或備用委託。在運行時動態創建備用代理
假設有一個腳本調用了非靜態的C#類方法「MoveTo」,它尚未在相應的類中實現。通常,如果它存在,則通過使用Method和委託實例的名稱調用「SetVariable」來創建相應的委託實例,並將其添加到腳本的作用域中。對於已經實現的方法來說,這很好。
如果該方法尚未實現的呼叫將不會失敗,而是被重定向到正常處理呼叫和假裝成功執行(這被認爲是在我的具體情況不加批判的)虛擬方法。
問題是:由IronPython腳本調用的方法有很多種簽名(實際上它們可以有任何可能的簽名類型)。因此,我想動態地創建一個後備代理,該代理獲得被調用方法的相同簽名,從而「捕獲」每個對尚未實現的方法的調用。
你們有什麼想法可以實現這個目標嗎?
你能否進一步澄清你的問題並添加一些樣品?你說你通過SetVariable通過name/delegate添加它們來調用「非靜態C#類方法」。這是否意味着在您的python腳本中,它們看起來像全局/靜態/非成員函數,而不是CLR對象實例上的成員調用(但仍隱式綁定到非公開的CLR對象)?沒有任何方法返回任何東西? – 2013-04-07 11:45:40
所以基本上你希望在運行時創建一個具有特定簽名的方法?你有沒有看過動態創建lambda表達式? – JJ15k 2013-04-07 11:46:02
@SimonOpelt:沒錯。在IronPython中,它們看起來像全局函數。它們所屬的對象是一種單例,在整個應用程序中只有這個類的一個實例。該對象代表了一個硬件,一個更精確的機器人。 IronPython用於編寫機器人的行爲腳本。暴露的方法控制機器人的不同能力,如駕駛,轉彎,移動手臂等。 – 2013-04-07 18:24:14