2012-01-23 107 views
0

有沒有什麼方法可以通過名稱調用方法並指定參數而不使用動態? (C#)IronPython通過名稱調用方法

UPDATE:

` 公共類節目 { 公共靜態無效的主要(字符串[]參數) { 的ScriptEngine發動機= Python.CreateEngine(); ScriptScope scope = engine.CreateScope();

 engine.ExecuteFile("script.py", scope); 

     dynamic calculator = scope.GetVariable("Calculator"); 
     dynamic calculatorInstance = engine.Operations.CreateInstance(calculator); 
     dynamic result = engine.Operations.InvokeMember(calculatorInstance, "sample"); 

     Console.ReadKey(); 
    } 
} 

`

class Calculator: def sample(self): return 'test'

這偉大工程

回答

1

可以使用ObjectOperations類進行動態操作,你可以從一個ScriptEngine實例得到它的一個實例:

ScriptEngine engine = ...; 
object result = engine.Operations.InvokeMember(o, "foo", 1, 2, "3"); 
0

開源即興接口(可在的NuGet可以找到)有任何動態對象,蟒蛇做reflection-like invocation一堆的方法,紅寶石,C#等,因爲它使用dlr c#binder代碼。

Impromptu.InvokeMember(o, "foo", 1, 2, "3") 

但是在這種情況下,JeffHardy的回答是最好的,因爲您已經在使用腳本引擎。