写点什么

C#和 Visual Basic 渐行渐远

  • 2007-05-15
  • 本文字数:873 字

    阅读完需:约 3 分钟

在 VB.NET 和 C#第一次被发布时,很多人认为它们只是在语法和一些小的方面不一样的相同语言而已。但随着时间的推移,它们(C#和 VB)之间的不同越来越明显,比如对匿名类型(Anonymous Type)的处理就有着天壤之别。

为了支持类似哈希表的数据结构和像分组这样的查询操作,由 LINQ 创建的匿名类型必须提供稳定的哈希码。而哈希码通常是由对象里的字段(Field)来创建的。

早期的匿名类型版本是不稳定的。换句话说,对象所包含的值可能会改变。而改变那些值的同时也改变了哈希码,然后会破坏一些哈希表或者恰好储存了对象的字典。

C#团队使得匿名类型稳定下来。如果对象不能被改变,那么哈希码也永远不变。通常这些稳定的类型规则被放在非默认的构造器(Constructor)和只有 Getter 的属性(Property)里。

而 VB 团队却不想放弃修改匿名类的功能。Paul Vick 这样写到:

尽管是有这样的问题存在,我们不想在泼水的时候把孩子也扔掉。现在匿名类型某种程度上是受限的,因为它们不能被命名,但是将来你可以用绑定来应用它们,甚至在它们被声明的上下文(Context)外面。现在我们在努力的一些新特性,比如有名字的匿名类型(Nominal Anonymous Type)和动态接口,将来会使匿名类型更加有用。本身而言,要使匿名类型稳定下来是不可想象的,特别是因为这会导致只有一条险径可走——也就是一旦它们稳定了,在未来的某个时候,兼容性会使它想要再不稳定变得异常困难,如果它们想要这么做的话。

VB 团队选择了一个相对复杂的方案,但这会给开发者更多的灵活性。当创建匿名类型时,程序员可以用关键词“Key”表示哪些字段是稳定的。另外要使属性只读的话,哈希码函数会只用那些 Key 字段产生哈希码。结果就是哈希码保证是稳定的。而且在被条件子句(Clause)用在联合(Join)和分组(Group)里时,字段可以被编译器自动地标识成 Key。

VB 和 C#之所以能不同的实现方式是因为匿名类型是一个编译器特性。CLR 自己对匿名类型没有什么概念,只是把它们看作有着自动产生名字的普通类。

和 VB 其他的语法一样,这个功能在 Orcas Beta 2 版本中才会提供。

查看英文原文: C# and VB Continue to Diverge

2007-05-15 19:38998

评论

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

董事长高见|越老越青春,近两百岁的它靠什么?

新消费日报

海外直播APP源码的开发给商家们带来了什么

山东布谷网络科技

App 社交娱乐 海外直播源码

软件测试 | DROP TABLE命令并不回收以前的相关访问授权

测吧(北京)科技有限公司

如何在 React 18 中使用 useSyncExternalStore

汽车之家客户端前端团队

js React ts

Next.js 13.4版本更新内容~

汽车之家客户端前端团队

SSR next 服务端预渲染

使用免费MES系统的成功经验

万界星空科技

开源 经验分享 MES系统

《云管理产品与服务图谱(2023)》发布!MIAOYUN荣登【运维平台】板块

MIAOYUN

云计算 运维平台 云管理平台 云管理 云管理产品与服务图谱

北京信息化协会信息技术应用创新工作委员会一行到开放原子开源基金会交流学习

开放原子开源基金会

开源 开放原子开源基金

go 语言实战入门案例之猜数字

timerring

Go

可视化分析30天免费,瓴羊Quick BI助力企业转型

流量猫猫头

Flink Unaligned Checkpoint 在 Shopee 的优化和实践

Apache Flink

大数据 flink 实时计算

低代码开发工具到底是给“谁”用的?

优秀

低代码开发工具

go 语言实战入门案例之实现Socks5

timerring

Go

IoT 场景下 TimescaleDB 与 TDengine 的性能对比测试报告出炉!点击查看

爱倒腾的程序员

数据库

百度搭台,千家打擂,文心杯创业大赛成投资人新宠?

热爱编程的小白白

AB实验遇到用户不均匀怎么办?—— vivo游戏中心业务实践经验分享

vivo互联网技术

AB实验 分层抽样 用户不均匀 事前用户分层

现代化税收征管的“四精”目标 科学技术发挥关键作用

用友BIP

税务管理

基于 Flink & Paimon 实现 Streaming Warehouse 数据一致性管理

Apache Flink

大数据 flink 实时计算

go 语言实战入门案例之命令行排版词典

timerring

Go

晴数智慧推出MagicData-CLAM高质量SFT数据集,助力大模型实现更优效果

Geek_2d6073

清华大学朱文武教授团队最新著作《图表征学习:迈向动态开放环境》重磅上市!

博文视点Broadview

🔥对线面试官-线程入门第一课

派大星

线程 Java 面试题

突破传统监测模式:业务状态监控HM的新思路 | 京东云技术团队

京东科技开发者

架构设计 业务监控 企业号 8 月 PK 榜 监测模式

如何正确使用 ThreadLocal,你真的用对了吗? | 京东云技术团队

京东科技开发者

内存泄露 ThreadLocal 源码剖析 企业号 8 月 PK 榜

华为开发者大会2023即将召开 主题演讲多平台线上直播

最新动态

瓴羊QuickBI在国内bi厂商中名列前茅,并展现出色的表现。

流量猫猫头

腾讯云 ES 重磅推出,一站式全托管的自治索引终于来了!

腾讯云大数据

ES

瓴羊QuickBI,助您加速企业转型,免费试用

巷子

大模型驱动软件2.0

汽车之家客户端前端团队

大模型

面试 JVM 一问三不知?看这篇就够

java易二三

Java 编程 程序员 计算机

关于自动限流的思考 | 京东云技术团队

京东科技开发者

限流 企业号 8 月 PK 榜 自动限流

C#和Visual Basic渐行渐远_.NET_Jonathan Allen_InfoQ精选文章