2012-01-23 56 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的回答是最好的,因为您已经在使用脚本引擎。