深入理解 c# 第十四章 调用声明在ScriptScope中的方法 用ScriptScope存储和获取信息

    class ScriptScopeDelegate
    {
        static void Main()//调用声明在ScriptScope中的方法 用ScriptScope存储和获取信息
        {
            string python = @"
def sayHello(user):
    print 'Hello %(name)s' % {'name' : user}
";
//python "\r\ndef sayHello(user):\r\n    print 'Hello %(name)s' % {'name' : user}\r\n"
            ScriptEngine engine = Python.CreateEngine();
//engine "IronPython 2.7.3"			
            ScriptScope scope = engine.CreateScope();
//scope {Microsoft.Scripting.Hosting.ScriptScope}			
            engine.Execute(python, scope);
            dynamic function = scope.GetVariable("sayHello");
//{IronPython.Runtime.PythonFunction}			
            function("Jon");
        }
    }	


  作用域中也可以包含函数,我们可以动态地获取然后调用这些函数,传递参数并从中返回值。
要做到这些,最简单的方式就是使用dynamic类型
  很多情况下,能够在执行时运行用户输入代码的表达式求值程序是十分有用的,如计算折扣、
运费的业务规则等。并且在以文本形式修改这些规则,而不用重新编译或重新部署二进制文件
方面非常有用。


 输出
 Hello Jon

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#窗体化软件加载外部Python文件,并让该Python文件能够调用C#窗体化软件的函数,你可以使用Python的扩展库IronPython来实现。IronPython是一个在.NET平台上运行的Python解释器,可以与C#代码进行互操作。 以下是实现的步骤: 1. 首先,确保你的C#项目已经引用了IronPython库。你可以通过NuGet包管理器添加IronPython库到你的项目。 2. 在C#代码,你需要创建一个IronPython的ScriptEngine实例,并使用该实例来加载和执行外部的Python文件。可以使用以下代码示例: ```csharp using IronPython.Hosting; using Microsoft.Scripting.Hosting; // 创建ScriptEngine实例 ScriptEngine engine = Python.CreateEngine(); // 加载外部的Python文件 ScriptScope scope = engine.ExecuteFile("path/to/your/python/file.py"); // 获取Python函数对象 dynamic pythonFunction = scope.GetVariable("function_name"); // 调用Python函数,并传递参数 pythonFunction(arg1, arg2); ``` 3. 在外部的Python文件,你可以通过import语句导入C#窗体化软件的命名空间,并调用的函数。以下是一个示例: ```python import clr clr.AddReference("YourCSharpApp") from YourCSharpAppNamespace import YourCSharpClass # 创建C#类的实例 csharp_instance = YourCSharpClass() # 调用C#类的方法 csharp_instance.YourMethod(arg1, arg2) ``` 注意替换上面代码的"YourCSharpApp"和"YourCSharpAppNamespace"为你的C#应用程序的名称和命名空间。 通过这种方式,你可以在C#窗体化软件加载外部的Python文件,并让Python文件能够调用C#窗体化软件的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值