写点什么

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

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

关注

评论

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

【LeetCode】查找和替换模式Java题解

Albert

LeetCode 6月月更

【sql语句基础】——查(select)(单表查询)

写代码两年半

sql MySQL 数据库 数据库· 6月月更

搭建前端监控,如何采集异常数据?

杨成功

架构 大前端 监控系统

Teambition 协作应用心得分享|社区征文

北洋

初夏征文

居家办公期间如何提升沟通效率|社区征文

北洋

初夏征文

提升管道效率:你需要知道如何识别CI/CD管道中的主要障碍

龙智—DevSecOps解决方案

ci CD CloudBees CI/CD管道

SDN系统方法 | 6. 网络操作系统

俞凡

架构 网络 sdn SDN系统方法

NixOS 22.05安装过程记录

sai

NixOS Nix

Android MaterialButton使用详解,告别shape、selector

yechaoa

android 6月月更 material design MaterialButton

前端食堂技术周刊第 40 期:HTTP/3、WebContainers 登陆 Firefox、Remix Conf 2022、VueConf US 2022

童欧巴

Vue 前端

spring4.1.8扩展实战之一:自定义环境变量验证

程序员欣宸

Java spring Spring Framework 6月月更

深圳3月14日起全市停工停业7天居家办公心得|社区征文

老周聊架构

后疫情时代企业应对策略 6月月更 初夏征文 高效工具 高效沟通

什么是数据驱动

奔向架构师

大数据 数据仓库 数据驱动 6月月更

测试基础之:单元测试

甜甜的白桃

单元测试 测试用例 6月月更

selenium操作元素遇到的异常

红毛丹

selenium 6月月更

OpenMAX (OMX)框架

程思扬

音视频 编解码

合理地配置线程池

急需上岸的小谢

6月月更

模块八作业

天琪实刚亮

架构训练营

八大误区,逐个击破(2):性能差?应用程序少?你对云的这些担心很多余!

龙智—DevSecOps解决方案

Atlassian atlassian云版 Atlassian白皮书

vue计算属性

小恺

6月月更

leetcode 47. Permutations II 全排列 II(中等)

okokabcd

LeetCode 搜索 数据结构与算法

模块八

ASCE

1.5 什么是架构师(连载)

凌晞

架构 架构师

从源码解析 MobX 响应式刷新机制

岛上码农

flutter ios 前端 安卓 6月月更

Java—流 Stream

武师叔

6月月更

逐向双碳:东数西算中的绿色需求与竞争焦点

脑极体

vue中mixins的使用方法和注意点

源字节1号

软件开发 前端开发

Vue-7-计算属性和方法的区别

Python研究所

6月月更

消息队列存储消息数据的 MySQL 表格

流火

企业架构的第一性原理

涛哥 数字产品和业务架构

企业架构

模块八:设计消息队列存储消息数据的MySQL表

jiaoxn

「架构实战营」

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