写点什么

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

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

关注

评论

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

数组(三)

Jason199

数组 js map 6月月更

耳东 2022 新的开始

耳东@Erdong

6月月更

NodeJS 操作cookie 🎀

德育处主任

node.js Node 6月月更

开发增效利器—IDEA辅助插件推荐

中原银行

开发 IDEA 插件 中原银行

Elux-将企业级工程化框架带入小程序开发

hiisea

小程序 taro 前端架构 前端框架 前端工程化

企业知识管理系统应具备的功能

小炮

数据库每日一题---第12天:上升的温度

知心宝贝

数据库 云计算 前端 后端 6月月更

实战 | 【男保姆式】教你打开第一个微信小程序

写程序的小王叔叔

微信开发 小程序开发 6月月更

C#入门系列(十五) -- 枚举

陈言必行

C# 六月月供

【Python技能树共建】验证码实操2案例

梦想橡皮擦

6月月更

运营商动态路由的神器 :IS-IS 协议

wljslmz

6月月更 路由协议 IS-IS

spring4.1.8扩展实战之四:感知spring容器变化(SmartLifecycle接口)

程序员欣宸

Java spring Spring Framework 6月月更

互联网公司研发效能/工程效率团队组织架构选择

laofo

互联网 DevOps 研发效能 持续交付 快手

HarmonyOS应用/服务开发流程详解

坚果

6月月更

《知道做到》:如何从知道到做到?

郭明

InfoQ 极客传媒 15 周年庆征文|你真的了解RPC和REST吗?

No Silver Bullet

Rest RPC框架 构架 6月月更 InfoQ极客传媒15周年庆

被这个参数三杀了

hncscwc

hadoop 6月月更

Git远程操作详解

乌龟哥哥

6月月更

如何在 Django 中创建应用程序?

海拥(haiyong.site)

django 6月月更

Maven实用技巧

Nick

Java maven 技巧 pom 6月月更

c语言不挂科(上)

工程师日月

6月月更

滴灌通-服务中小企业的金融创新(36/100)

hackstoic

创业 商业模式

Jetty 运行的时候出现 503 异常的原因

HoneyMoose

主数据管理

奔向架构师

数据仓库 主数据 6月月更

盲盒系统新品开发,盲盒 APP 酷炫 UI 成品源码开发

WDL22119

盲盒商城 盲盒 盲盒开发 盲盒源码 盲盒H5开发

【愚公系列】2022年06月 通用职责分配原则(二)-创造者原则

愚公搬代码

6月月更

详解MOVE PROTOCOL的测试版,让健康运动如影随形

股市老人

Linux开发_动态静态库创建与Makefile规则

DS小龙哥

6月月更

远程办公带来的挑战和变化 | 社区征文

编程攻略

初夏征文

Java Core 「7」各种不同类型的锁

Samson

学习笔记 Java core 6月月更

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