DLR引擎是一个通用的平台和承载模型,使动态语言可在 Microsoft .NET Framework 公共语言运行时 (CLR) 上运行。
有数个DLR 脚本程序集提供运行时脚本环境,从而在动态语言与静态语言之间建立起桥梁:
- Microsoft.Dynamic.Dll
- Microsoft.Scripting.dll
- Microsoft.Scripting.Debugging.dll
通过CLR之上的DLR,使得C#有可能访问动态的类和方法,但是动态语言与静态语言之间有着天然的鸿沟,动态语言的类型不确定性,使得变量的属性和方法都无法在编译时确定。C# 4.0引入的Dynamic关键字就是解决这个问题的关键。该类型是一个静态的(static)类型,但是一个dynamic类型的对象会绕过静态类型检查。在大多数情况下dynamic和object类型有些相似,但是在编译时,dynamic类型被假定为支持任何操作,也就是说dynamic类型的对象可以是一个Office对象,可以是一个COM对象或者是DOM对象,而如果在运行时发现该对象不是期望的对象则会抛出一个运行时异常。因此和动态语言一样,在dynamic类型上调用何种方法,完全由程序员所把握。
通过dynamic,C# 4.0绕过了静态语言的类型检查,相对于
Java对Jruby的调用,C#显得简单多了。
下面的脚本展示了C# 4.0如何和ironpython交互
using System;
using Microsoft.Scripting.Hosting;
using IronPython.Hosting;
namespace Decorator.Try
{
class Program
{
static void Main(string[] args)
{
Action action = () => Console.WriteLine("Hello World");
ScriptRuntime runtime = Python.CreateRuntime();
dynamic script = runtime.UseFile("script.py");
dynamic decorator = script.decorator(action);
decorator.execute();
}
}
}
def wrapper(function):
def inner(self):
print "Decorator... "
return function(self)
return inner
class decorator(object):
def __init__(self, function):
self.action = function
@wrapper
def execute(self):
self.action()
--精彩待续------
分享到:
相关推荐
动态类型是C# 4.0的一个重要特性,它允许变量在运行时确定其类型,这在与IronPython或IronRuby等动态语言交互时特别有用。动态类型通过`dynamic`关键字实现,它简化了与非.NET对象(如JavaScript对象)的交互。 多...
《C#4.0权威指南》是一本专为开发者设计的详尽教程,旨在帮助读者深入理解C#4.0编程语言的各个方面。这本指南以其清晰易懂的风格,成为了学习C#4.0的必备参考书。通过阅读本书,你将能够充分利用C#4.0的强大功能,...
此外,C# 4.0还引入了可选参数和命名参数,这使得方法调用更加灵活,可以减少因参数顺序错误导致的编程错误。 书中的章节涵盖了C#的基础知识,包括变量、数据类型、控制结构(如if语句和循环)、函数、类和对象、...
C# 4.0还引入了命名参数(Named Arguments),允许在调用方法时指定参数名,而不是仅仅依赖参数的顺序。这提高了代码的可读性和维护性,尤其是在有多个参数的方法中。 改进的委托(Delegates)和事件(Events)处理...
C#4.0编程语言是微软.NET框架的重要组成部分,它为开发者提供了强大的工具来构建高效、可维护的软件应用。这个源代码包包含了C#4.0编程的详细实例,覆盖了每一章节的关键知识点,确保所有示例都已经过调试,能够顺利...
C# 4.0的动态特性得益于DLR,这是一个运行时环境,支持动态语言如IronPython和IronRuby,并为C#提供了动态操作的支持。DLR包含表达树(Expression Trees)和绑定器(Binder),用于解析和执行动态操作。 **表达树...
7. **动态语言运行时(DLR)集成**:C#4.0更紧密地集成了动态语言运行时(Dynamic Language Runtime),这使得C#与其他动态语言(如IronPython和IronRuby)之间的交互变得更加容易。 8. **性能优化**:C#4.0对编译器...
动态类型在C# 4.0中是一个重大改进,允许变量在运行时绑定到任何类型,这极大地简化了与动态语言(如IronPython或IronRuby)的交互。通过`dynamic`关键字,开发者可以编写出更加灵活的代码,尤其是在处理不确定类型...
2. **命名和可选参数(Named and Optional Arguments)**:C# 4.0允许在调用方法时指定参数名,并可省略某些参数。这提高了代码的可读性和灵活性,尤其是在有多个重载方法的情况下。 ```csharp void MyMethod(int a...
6. **动态编程**:介绍了C#4.0引入的动态类型,以及如何与IronPython、IronRuby等动态语言交互。 7. **.NET Framework**:概述.NET Framework的基础架构,包括类型系统、垃圾回收、异常处理和线程管理。 8. **单元...
1. **动态绑定**(Dynamic binding):C# 4.0引入了`dynamic`关键字,允许在编译时无法确定类型,而是在运行时进行类型检查和方法调用。这使得C#可以更方便地与动态语言如Python、JavaScript等交互,或者使用像Iron...
C# 4.0引入了命名参数和可选参数,这使得函数调用更加灵活。可选参数允许你在定义方法时为参数设置默认值,调用者可以选择提供值或者忽略它们。命名参数则允许你按照参数名而不是位置来传递参数,提高了代码的可读性...
JLKEngine中间件平台是一款专为地理信息系统(GIS)开发设计的软件产品,基于Esri的ArcEngine10技术,并采用C#4.0编程语言进行构建。这款中间件平台的核心目标是提供一个高效、稳定且易于扩展的GIS应用开发环境,...
在2010年发布的C# 4.0中,微软引入了一个名为dynamic的新关键字,它标志了C#语言类型系统的一个重大转变。Dynamic关键字的出现,赋予了C#一种类似动态语言的特性,允许开发者在编写代码时,能够延后类型检查的时机至...
接着,C# 4.0引入了可选参数,这使得方法可以接受未提供所有参数的调用。在定义方法时,可以为参数设置默认值,从而在调用时不需显式传递这些值。例如: ```csharp static void DoSomething(int notOptionalArg, ...
在C# 4.0中,开发者可以为函数参数提供默认值,使得调用者可以选择传递哪些参数。同时,命名参数允许不按照参数声明的顺序传递,而是通过参数名称指定值。这提高了代码的可读性,并允许函数接口更加灵活,减少了因...
2. **C# 4.0**:随着.NET Framework 4.0一同发布的还有C#编程语言的第四个主要版本。C# 4.0引入了几个新特性,如动态类型(dynamic)、命名参数(named arguments)、可选参数(optional parameters)、协变和逆变...