BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

C#特性聚焦:动态类型化对象、Duck类型和多重分配

| 作者 Jonathan Allen 关注 530 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2008年11月19日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在我们要深入研究第一个C#特性之前,有必要知道微软许诺,任何在C#中有的功能在VB中也会具通过某种形式来提供,反之亦然。不过他们没有必要以同样的方式来提供这些功能,语言之间还是希望继续有所区别。

随着动态语言和DLR日益增加的重要性,C#也需要能处理动态类型化的对象(Dynamically Typed Objects)。目前,通过对静态类进行反射,虽然能够实现后期调用,但这种方式却需要大量的代码。此外,对DLR对象的调用需要一个完全不同的,使用 了DLR反射函数的调用方式。

在C#中,你可以简单地声明对象的静态类型为“dynamic”。就像VB的Option Explicit Off选项一样,它告诉编译器忽略必要的代码来解析运行时调用的方法绑定。在IL层面,被声明为dynamic的变量是一个System.Object类 型,附加了一个额外标签来标明它使用动态调用语义。

在运行时,所有普通重载解析规则都是基于对象的运行时类型执行的。这意味着,你能够直接地执行多重分配,而不用借助反射或访问者模式。

每个动态语言都具有它们自己的成员查找规则。为了支持这个功能,对象需要实现IDynamicObject接口。如果这个接口存在于运行时对象上,那么对象就能处理它自己的成员查找过程。在示范中,Ander演示了如何在C#中定义一个动态对象。

当然,这就意味着你可以在C#中的任何地方使用duck类型。

查看英文原文:C# Feature Focus: Dynamically Typed Objects, Duck Typing, and Multiple Dispatch

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

少了一个字吧? by Wu Junyin

第一个C#性-> 特性!

Re: 少了一个字吧? by 霍 泰稳

已经修正,谢谢Junyin的指正!

Re: 少了一个字吧? by x zhang

故意的吧 哈哈

Re: 少了一个字吧? by lee steeven

够YD啊你

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT