写点什么

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:38919

评论

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

Bit.Store:熊市漫漫,稳定Staking产品或成主旋律

西柚子

于文文、胡夏等明星带你玩转派对 皮皮APP点燃你的夏日

联营汇聚

数仓的字符截取三胞胎:substrb、substr、substring

华为云开发者联盟

数据库 后端 开发 华为云

一套系统,减轻人流集中地10倍的通行压力

天天预约

人脸识别 考勤管理 设备接入 预约工具 疫情防控

关于企业数字化的展望(38/100)

hackstoic

数字化

熊市慢慢,Bit.Store提供稳定Staking产品助你穿越牛熊

BlockChain先知

信通院举办“业务与应用安全发展论坛” 天翼云安全能力再获认可

Geek_2d6073

跟着官方文档学 Python 之:简介

甜甜的白桃

Python 零基础 6月月更

大数据性能提升28%!阿里云新一代本地SSD实例i4开放公测

阿里云弹性计算

大数据 io SSD NoSQL 数据库

可观测,才可靠:云上自动化运维CloudOps系列沙龙 第一弹

阿里云弹性计算

DevOps 可观测性 自动化运维 CloudOps

本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献

OpenHarmony开发者

OpenHarmony

什么是 ICMP ?ping和ICMP之间有啥关系?

wljslmz

网络协议 ping ICMP 6月月更

在线文本按行批量反转工具

入门小站

工具

工作流自动化 低代码是关键

力软低代码开发平台

linux检测系统是否被入侵(上)

入门小站

Linux

4种方法教你如何查看java对象所占内存大小

华为云开发者联盟

Java 开发 内存 代码

带你认识图数据库性能和场景测试利器LDBC SNB

华为云开发者联盟

人工智能 华为云 图数据库

SQL报了一个不常见的错误,让新来的实习生懵了

华为云开发者联盟

数据库 sql 程序员 后端 华为云

开箱即用!Linux 内核首个原生支持,让你的容器体验飞起来!| 龙蜥技术

阿里巴巴云原生

Linux 阿里云 容器 云原生

从科研创新到产业落地 华为发布人工智能大模型全流程使能体系

科技热闻

今晚战码先锋润和赛道第2期直播丨如何参与OpenHarmony代码贡献

OpenHarmony开发者

OpenHarmony

有关 Java 9 的 String

HoneyMoose

Substrate 源码追新导读: 4月底重大更新: Nomination Pool 即将上线, NFT增加锁定功能

彭亚伦

Substrate 波卡 波卡生态

Bit.Store:熊市漫漫,稳定Staking产品或成主旋律

鳄鱼视界

在线JSON转PlainText工具

入门小站

工具

企业架构师面试的100个问题

涛哥 数字产品和业务架构

企业架构师

Bit.Store:熊市漫漫,稳定Staking产品或成主旋律

小哈区块

大促场景下,如何做好网关高可用防护

阿里巴巴云原生

阿里云 高可用 云原生 网关 高可用微服务

Java 中的 String Pool 简介

HoneyMoose

2022年第一季度消费金融APP用户洞察——总数达4479万人

易观分析

消费金融

拥抱云原生:江苏移动订单中心实践

鲸品堂

云原生

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