IronPython按名称调用方法

时间:2012-01-23 10:50:42

标签: dynamic ironpython

有没有办法按名称调用方法并指定参数而不使用动态? (C#)

更新

` 公共课程     {         public static void Main(string [] args)         {             ScriptEngine engine = 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'

效果很好

2 个答案:

答案 0 :(得分:2)

您可以使用ObjectOperations类来执行动态操作,您可以从ScriptEngine实例获取它的实例:

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

答案 1 :(得分:0)

Open Source Impromptu-Interface(可以在nuget中找到)有很多方法可以在任何动态对象,python,ruby,c#等上执行reflection-like invocation,因为它使用了dlr c#binder代码。 / p>

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

但在这种情况下,JeffHardy的答案是最好的,因为你已经在使用脚本引擎了。