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

C# 动态类型对象探究
本文探讨了C#中动态类型对象的功能及其在语言中的应用。通过使用dynamic关键字, 开发者可以创建不需要编译时类型检查的对象。这种特性允许更灵活的编程风格, 并支持多重分配和鸭子类型。文章还介绍了如何在C#中实现IDynamicObject接口以自定义成员查找规则。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值