在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

评论

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

微信视频号的不同 | 视频号28天(03)

赵新龙

28天写作

汽油车最简知识——28天写作Day2/28

mtfelix

28天写作 电动汽车

week7-homework

J

程序员练习算法的几个实用技巧

Phoenix

算法

MySQL慢查询(下):问题解决,干货总结

架构精进之路

MySQL MySQL 高可用 MySQL优化 28天写作

数仓面试高频考点--解决hive小文件过多问题

五分钟学大数据

大数据 hive 面试 数仓

技术人小故事-团队愿景篇-第2段

Ian哥

28天写作

反对没有节制的加班文化

熊斌

管理 职场 工作思路 28天写作

中华石衫 Elasticsearch 顶尖高手系列课程

escray

elasticsearch elastic 28天写作 死磕Elasticsearch

Java并发编程实战(3)- 互斥锁

技术修行者

Java 并发编程 多线程

架构师训练营一期大作业二

陈龙

架构师训练营一期大作业一

陈龙

有关架构设计原则的总结

跳蚤

从大局着眼,立微处发力

张老蔫

28天写作

week7-总结

J

堡垒机是什么?

第七周 学习总结

简简单单

RocketMQ如何保证消息可靠性

废材姑娘

RocketMQ

第12周作业

Jack

python自学 第一章 初始python

WEB前端修行日志

Python

架构师系列 13 Spark 大数据处理在金融领域中的应用

桃花原记

Windows10 Kafka Docker 集群搭建

Docker kafka

Java Kafka 简单示例

Java kafka

大作业2

蓝黑

创业也是要帮助他人突破认知 Jan 10, 2021

王泰

28天写作

面试官:换人!赶快换人!连 CopyOnWriteArrayList 都没听过!

xcbeyond

Java 28天写作 CopyOnWriteArrayList

架构师培训第二周课后作业

跳蚤

Java程序经验小结:谨慎的使用本地方法

后台技术汇

28天写作

HDFS SHELL详解(3)

罗小龙

hadoop 28天写作 hdfs shell

第七周 性能优化作业

简简单单

4.5万字手把手教你实现MySQL TB级数据存储!!

冰河

MySQL 分布式 微服务 数据存储 mycat

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