写点什么

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

  • 2008-11-18
  • 本文字数:597 字

    阅读完需:约 2 分钟

在我们要深入研究第一个 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

2008-11-18 06:361833
用户头像

发布了 254 篇内容, 共 71.0 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

Telegram的强大社交属性下TON链项目的潜力及开发前景

区块链软件开发推广运营

dapp开发 区块链开发 NFT开发 公链开发

软件测试学习笔记丨测试体系与测试方案设计

测试人

软件测试 测试开发

开始报名啦!智能可观测运维技术 MeetUp 议题硬核来袭

OpenAnolis小助手

操作系统 系统运维 可观测运维技术

高性能网络SIG月度动态:自研 IPPROTO_SMC 贡献 Linux 社区,virtio 增加多项优化

OpenAnolis小助手

高性能网络 龙蜥社区 龙蜥社区SIG

Leangoo一站式敏捷研发协同平台,助力敏捷企业高效协同

顿顿顿

敏捷开发 敏捷工具 scrum工具

KDD 2024 | 专业实力再获认可!网易伏羲四篇论文入选

网易伏羲

人工智能 论文 KDD 网易伏羲

迁移方案详解 | 使用YMP从异构数据库迁移到YashanDB

极客天地

Apache Paimon统一大数据湖存储底座

Apache Flink

大数据 flink 流批一体 paimon

长文本创作者福音来了,百度文库新产品「橙篇」一口气生成10万字

极客天地

百度二面,有点小激动!附面试题

王磊

Java

Flutter中的异步和多进程

凌宇之蓝

晶澳太阳能选择 TDengine 加强数据管理,助力实现双碳目标

TDengine

数据库 tdengine 时序数据库

软件测试学习笔记丨redis的穿透、击穿、雪崩有什么不同点?

测试人

redis 软件测试 测试开发

Advanced RAG 08:使用 Self-RAG 打造高质量、可追溯的 RAG System

Baihai IDP

程序员 AI 企业号 6 月 PK 榜 rag

C#特性聚焦:动态类型化对象、Duck类型和多重分配_.NET_Jonathan Allen_InfoQ精选文章