写点什么

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:361597
用户头像

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

关注

评论

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

兴盛优选:时序数据如何高效处理?

TDengine

数据库 tdengine 时序数据库

运动健康服务场景事件订阅,让应用推送“更懂用户”

HarmonyOS SDK

开源一夏 | 使用 CSS 的水波文本动画(免费代码)

海拥(haiyong.site)

开源 8月月更

数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口

FinClip

巧用自定义函数,文本控件秒变高速缓存

明道云

如何设计一组会出现死锁(Deadlock)的ABAP程序

汪子熙

操作系统 SAP abap 8月月更 ABAP死锁

从滴滴被罚款事件思考企业数据治理问题

墨天轮

大数据 滴滴 数据治理 数据安全

从普通程序员晋升到架构师需要掌握哪些技术,这份37W字Java高性能架构用13个章节彻底讲明白了

Java永远的神

Java 程序员 面试 程序人生 架构师

有了阿里这5份Java架构师手册,学习起来轻松多了!

冉然学Java

Java 算法 java面试 性能调优实战 并发架构设计思想

如何解决 “主节点故障恢复的自动化” 问题?

八点半的Bruce.D

CCF大会腾源会专场即将召开,聚焦基础软件与开发语言未来发展

腾源会

开源 腾源会

阿里云 Hologres助力好未来网校实时数仓降本增效

阿里云大数据AI技术

数据分析 数据治理 数据安全

直播预告 | Authing 如何打造云原生 SaaS 产品架构?

Authing

Open Office XML 格式中的 Style 设计原理

汪子熙

xml 微软 Office 8月月更 openOffice

SAP 产品增强技术回顾

汪子熙

SaaS SAP 企业级应用 云应用 8月月更

分析 Flink 任务如何超过 YARN 容器内存限制

移动云大数据

Flink 平台

浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

汪子熙

编程语言 oop aop spring aop 8月月更

阿里架构师首发:80W字微服务架构手册GitHub上杀疯了

冉然学Java

Java 编程 程序员 架构 微服务

Netty进阶 -- WebSocket长连接开发

Bug终结者

8月月更

突破次元壁垒,让身边的玩偶手办在屏幕上动起来!

HarmonyOS SDK

开源一夏 |卷王必备学习的MyBatis-Plus用法~

叶秋学长

开源 mybaits 8月月更

TiSpark 原理之下推丨TiDB 工具分享

PingCAP

TiDB

AS北京站如约而至!发布参会感想有机会获得官方周边奖励

InfoQ写作社区官方

热门活动 ArchSummit

ABAP应用服务器的HTTP响应状态码(Status Code)

汪子熙

前端开发 HTTP web开发 SAP 8月月更

SAP ABAP 里存在 Java List 这种集合工具类么?CL_OBJECT_COLLECTION 了解一下

汪子熙

设计模式 迭代器模式 SAP abap 8月月更

深度解析佛萨奇,Forsage魔豹联盟系统开发方案(源码部署)

开发微hkkf5566

Go-Excelize API源码阅读(七)—— CopySheet(from, to int)

Regan Yue

开源 源码阅读 8月日更 8月月更

使用脚手架 快速开发 React组件 npm包 (基于TSDX)

HullQin

CSS JavaScript html 前端 8月月更

在座的Python爬虫工程师,你敢爬律师事务所站点吗?

梦想橡皮擦

Python 爬虫 8月月更

5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap

掘金安东尼

前端 RXJS 8月月更

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