【问题标题】:IronPython call method by nameIronPython 按名称调用方法
【发布时间】:2012-02-16 17:35:44
【问题描述】:

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

更新:

` 公开课程序 { 公共静态无效主要(字符串[]参数) { ScriptEngine 引擎 = Python.CreateEngine(); ScriptScope 范围 = 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'

效果很好

【问题讨论】:

    标签: dynamic ironpython


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 2012-11-28
        • 2010-11-08
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多