随笔-312  评论-11907  文章-2  trackbacks-224

A-Z兄昨天曾经提到过dynamic lookup将变得很强大,推导出很多动态语言特性,这是C#团队的功劳,我昨晚也恰好翻译了一篇InfoQ文章,介绍的是同一个东西。

总体来说,《Future Focus》是一个每月一篇的文章系列:

C#开发团队中的Charlie Calvert和Mads Torgersen宣布他们将开始一个新的名为《Future Focus》的文章系列,其中将每月对C#最新的开发状况以及发展规划进行介绍。

 

在这个第一篇中,《Future Focus》的第一篇文章中介绍了有关动态查找(Dynamic Lookup)的功能。

动态查找功能的实现最开始是从CLR开始的,不过很快该功能就变成了动态语言运行时(Dynamic Language Runtime,DLR)的一部分。有了DLR的支持,我们即可方便地创建一系列的动态工具。例如,DLR为IronRubyIronPython二者都提供了基础支持。同样,C#开发团队也会借助于DLR所提供的基础设施来实现动态查找功能。

实际上,VB.NET中已经对动态查找提供了支持,不过它的动态查找通常被叫做延迟绑定(late binding)。新版本的.NET将会把这个功能引入到C#中来,同时也会为所有的.NET语言(包括VB)提供一个统一的运行时名称解析基础。

 

常见的动态查找使用场景有:

  1. Office编程:在下个版本的Visual Studio中,Office编程将会变得更加简单。开发人员再也无须引入众多的类库,或是指定调用方法时的可选参数了。对Office编程的支持也将成为对COM互操作以及OfficePIA增强的一部分。

  2. 对动态语言的支持:类似IronRubyIronPython的动态语言正一天天地变得更加流行。目前,这些语言中可以直接调用C#代码,不过从C#中调用它们却并不容易。在下个版本的Visual Studio中,C#开发者能够非常容易地使用到IronPython 或IronRuby中定义的类型。这样,开发者就能够更容易地使用现有的动态语言代码,同时也为编写新功能提供了更多的选择。

  3. 调用反射:目前,C#开发者能够借助反射在运行时初始化类型并任意调用其方法。有了动态查找的支持,此类调用将会被大大简化。

 

C#团队也正在考虑添加一个名为dynamic的关键字来将动态代码块分隔开:

static void Main(string[] args)
{
    dynamic
    {
        object myDynamicObject = GetDynamicObject();
        myDynamicObject.SomeMethod();         // call a method   
        myDynamicObject.someString = "value"; // Set a field
        myDynamicObject[0] = 25;              // Access an indexer
    }
}

dynamic块中的所有代码都能够支持潜在需要的动态查找功能——哪怕代码中尝试访问的成员并不能在编译时确定,编译器也不会抛出异常。在运行时,DLR将会在myDynamciObject所引用的对象中查找相应的方法或属性。若能够找到的话,则进行调用,否则将抛出异常。而在dynamic块之外的代码仍将只支持静态访问,就和我们现在的写法一样。

 

InfoQ上的原文可以在这里看到。

posted on 2008-02-03 08:19 Dflying Chen 阅读(8631) 评论(15)  编辑 收藏 所属分类: C#新技术介绍

评论:
#1楼  2008-02-03 09:14 | carysun      
不懂动态查找是什么意思
  回复  引用  查看    
#2楼  2008-02-03 09:18 | 麒麟.NET      
不错,关注……
  回复  引用  查看    
#3楼  2008-02-03 09:34 | 木野狐(Neil Chen)      
下一个版本的 C# 会是什么版本呢~
4.0 ?
  回复  引用  查看    
#4楼  2008-02-03 09:46 | ITAres      
期待中~~
  回复  引用  查看    
#5楼  2008-02-03 10:22 | 游荡的灵魂      
很厉害。。这样在设计时可以降低耦合
  回复  引用  查看    
#6楼 [楼主] 2008-02-03 10:27 | Dflying Chen      
@游荡的灵魂
越来越“动态化”,不知道是不是好事
  回复  引用  查看    
#7楼 [楼主] 2008-02-03 10:27 | Dflying Chen      
--引用--------------------------------------------------
木野狐(Neil Chen): 下一个版本的 C# 会是什么版本呢~
4.0 ?
--------------------------------------------------------
呵呵,只是个版本号而已
  回复  引用  查看    
#8楼 [楼主] 2008-02-03 10:27 | Dflying Chen      
--引用--------------------------------------------------
carysun: 不懂动态查找是什么意思
--------------------------------------------------------
就是VB中的延迟绑定
  回复  引用  查看    
#9楼  2008-02-03 11:54 | 装配脑袋      
希望VB10能在动态方面比C#走得更远
  回复  引用  查看    
#10楼 [楼主] 2008-02-03 12:06 | Dflying Chen      
--引用--------------------------------------------------
装配脑袋: 希望VB10能在动态方面比C#走得更远
--------------------------------------------------------
以后要公用一套DLR了,怕是所有语言都一样了
  回复  引用  查看    
#11楼  2008-02-03 12:35 | 装配脑袋      
不会的,Python等语言可以动态为类添加成员,目前没有看到C#有此计划。动态语言还有很多方面。比如动态接口,动态数据成员,动态标识符,动态泛型约束等等。所以说有很大的发挥余地。
  回复  引用  查看    
#12楼 [楼主] 2008-02-03 12:41 | Dflying Chen      
--引用--------------------------------------------------
装配脑袋: 不会的,Python等语言可以动态为类添加成员,目前没有看到C#有此计划。动态语言还有很多方面。比如动态接口,动态数据成员,动态标识符,动态泛型约束等等。所以说有很大的发挥余地。
--------------------------------------------------------
呵呵,还是让VB和C#有些区别比较好
  回复  引用  查看    
#13楼  2008-02-05 03:03 | fox23      
现在VB已经是怪异风格了。。。
  回复  引用  查看    
#14楼  2008-02-05 23:39 | 图片 [未注册用户]
--引用--------------------------------------------------
fox23: 现在VB已经是怪异风格了。。。
--------------------------------------------------------
VB还好 PHP太怪了

  回复  引用    
#15楼  2008-05-15 09:43 | 龙行天下 [未注册用户]
这样做会不会降低程序的运行效率?动态查找是很费时间的
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: