- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
--(完美WORD文档DOC格式,可在线免费浏览全文和下载)值得下载!
dynamic:用于生成一个动态的类型,在代码中可以通过不同的实例化类来变成不同的对象,例如:注:对于dynamic类型有两个限制。动态对象不支持扩展方法,匿名函数(Lambda表达式)也不能用作动态方法调用的参数,因此LINQ不能用于动态对象。大多数LINQ调用都是扩展方法,而Lambda表达式用作这些扩展方法的参数。dynamic实质:C#编译器做了很多工作,以支持动态类型。在生成的代码中,会看到对System.Runtime.CompilerServices.CallSite和System.Runtime.CompilerServices.CallSiteBinder类的引用。CallSite是在运行期间处理查找操作的类型。在运行期间调用动态对象时,必须找到该对象,看看其成员是否存在。CallSite会缓存这个信息,这样查找操作就不需要重复执行。没有这个过程,循环结构的性能就有问题。CallSite完成了成员查找操作后,就调用CallSiteBinder()方法。它从CallSite中提取信息,并生成表达式树,来表示绑定器绑定的操作。显然这需要做许多工作。优化非常复杂的操作时需要格外小心。显然,使用dynamic类型是有用的,但它是有代价的。dynamic VS object:很多情况下,初见dynamic会觉得和System.object有很多表现上的相似性。然而,System.object毕竟是静态类型;而dynamic要解决的是对动态对象的绑定。例如一个反射对象、一个DOM实例、一个COM对象或者一个来自IronRuby语言或其他语言的对象。DLR ScriptRuntime:假定能给应用程序添加脚本编辑功能,并给脚本传入数值和从脚本传出数值,使应用程序可以利用脚本完成工作。这些都是在应用程序中包含DLR的ScriptRuntime而提供的功能。目前,IronRuby、IronPython和JavaScript都支持包含在应用程序中的脚本语言。有了ScriptRuntime,就可以执行存储在文件中的代码段或完整的脚本。可以选择合适的语言引擎,或者让DLR确定使用什么引擎。脚本可以在自己的应用程序域或者在当前的应用程序域中创建。不仅可以给脚本传入数值并从脚本中传出数值,还可以在脚本中调用在动态对象上创建的方法。下面是一个Windows客户端应用程序,它也可以是一个大型Web应用程序或任何其他应用程序。下图显示了这个应用程序的样例。该应用程序提取所购买的物品数量和物品的总价,并根据所选的单选按钮使用某个折扣。在实际的应用程序中,系统使用略微复杂的方式确定要使用的折扣,但对于本例,单选按钮就足够了。下面是计算折扣的代码:第一部分仅确定要应用折扣的脚本AmountDisc.py或CoundDisc.py。AmountDisc.py根据购买的金额计算折扣。能打折的最低购买金额是$25.00.如果购买金额小于这个值,就不计算折扣,否则就使用2.5%的折扣率。CountDisc.py根据购买的物品数量计算折扣:在这个Python脚本中,购买的物品数量必须大于5,才能给总价应用10%的折扣率。下一部分是启动ScriptRuntime环境。这需要执行4个特定的步骤:创建ScriptRuntime对象、设置合适的ScriptEngine和创建ScriptSource,以及创建ScriptScope。ScriptRuntime对象是起点,也是包含ScriptRuntime的基础。它拥有包含环境的全局状态。ScriptRuntime对象使用CreateFromConfiguration()静态方法创建。app.config如下所示:这段代码定义了“Microsoft.scripting”的一部分,设置了IronPython语言引擎的几个属性。接着,从ScriptRuntime中获取一个对ScriptEngine的引用。在本例中,指定需要Python引擎,但ScriptRuntime可以自己确定这一点,因为脚本的扩展名是py。ScriptRuntime完成了执行脚本代码的工作。执行文件或代码段中的脚本有几种方法。ScriptEngine还提供了ScriptSource和ScriptScope。ScriptSource对象允许访问脚本,它表示脚本的源代码。有了它,就可以操作脚本的源代码。从磁盘上加载它,逐行解析它,甚至把脚本编译到CompiledCode对象中。如果多次执行同一个脚本,这就很方便。ScriptScope对象实际上是一个名称空间。要给脚本传入值或从脚本传出值,应把一个变量绑定到ScriptScope上。本例调用SetVariable方法给Python脚本传入prodCount变量和amt变量。它们是totalItems文本框和t
文档评论(0)