WEB开发网
开发学院软件开发C语言 C# 4动态编程新特性与DLR剖析 阅读

C# 4动态编程新特性与DLR剖析

 2010-09-30 22:46:36 来源:WEB开发网   
核心提示: 接着需要创建一个ScriptEngine对象,它是动态语言代码的执行引擎:ScriptEngine engine = pythonRuntime.GetEngine("py");ScriptScope对象类似于C#中的命名空间,C# 4动态编程新特性与DLR剖析(10),其中

接着需要创建一个ScriptEngine对象,它是动态语言代码的执行引擎:

ScriptEngine engine = pythonRuntime.GetEngine("py");

ScriptScope对象类似于C#中的命名空间,其中可以通过定义一些变量向动态代码传入数据,比如下述代码将一个C# 创建的ExpandoObject对象传给Python代码:

    ScriptScope scope = pythonRuntime.CreateScope();
    //C#创建动态对象
     dynamic expando = new ExpandoObject();
    expando.Name = "JinXuLiang"; //动态添加一个字段
     //让IronPython接收C#创建的Expando对象
    scope.SetVariable("ExpandoObject", expando);
    string pythonCode = "print ExpandoObject.Name"; 
    //IronPython引擎执行Python语句
    engine.CreateScriptSourceFromString(pythonCode).Execute(scope);      

上述示例代码是直接执行Python代码。在实际开发中,更常见的是直接执行Python文件中的代码,假设有一个Calculator.py文件,其中定义了一个Add函数:

    def Add(a,b):
        return a+b

则以下C#代码可以直接执行之:

    ScriptRuntime pythonRuntime = Python.CreateRuntime();
    dynamic pythonFile = pythonRuntime.UseFile("Calculator.py");
    Console.WriteLine(pythonFile.Add(100, 200));

上述示例说明在DLR的支持之下,可以让静态编程语言使用动态语言所开发的库,反过来,基于DLR实现的动态编程语言也能使用为静态语言所设计的库,比如标准的.NET基类库。

这意味着两点:

(1)我们现在可以将“静态”和“动态”编程语言组合起来,开发出一些具有高度交互性的应用程序,使用静态编程语言搭建系统框架,使用动态编程语言实现交互性,这是一个很值得注意的应用领域。

(2)将来会出现一些“静态”“动态”编程语言同时适用的库,向实现“无所不在的复用”目标又前进了一步。

Visual Studio 2010为新的.NET编程语言F#提供了专门的项目模板,但没有为IronPython和IronRuby之类动态语言的开发提供支持,相信随着动态语言在.NET平台之上的应用日趋广泛,后继版本的Visual Studio会直接支持动态语言的开发。

从C# 1.0~4.0所走过的路,可以很清晰地看到它的发展轨迹,得到这样的一个结论:

未来的编程语言应该是多范式的,具有高度的可组合性,在一个项目或产品中组合多个编程语言、使用多种编程范式会变得越来越普遍。

我们可以推断C#的后继版本将会在此条道路上越走越远……

上一页  5 6 7 8 9 10 

Tags:动态 编程 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接