快手、孩子王、华为等专家分享大模型在电商运营、母婴消费、翻译等行业场景的实际应用 了解详情
写点什么

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

评论

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

交易所合约跟单软件搭建,火币合约跟单平台开发

区块链技术重新定义 物联网的物与物之间的交易

CECBC

发展空间

推荐25种自媒体运营必备工具 (建议收藏)

科技猫

工具 网站 分享 运营 自媒体

《彩食鲜 CTO 乔新亮:程序员如何从技术走向管理》(采访提纲)

这就是编程

【科创人】贝锐创始人陈宇晔:花生壳诞生自一次挫折,15年坚守有温度不作恶

科创人

阿里P8亲自讲解!带你一步一步深入Handler源码,满满干货指导

欢喜学安卓

android 程序员 面试 移动开发

阿里P8大牛亲自教你!带你快速通过面试,Android岗

欢喜学安卓

android 程序员 面试 移动开发

iceberg查询加速原理

聚变

腾讯大神为什么会对这份“redis深度笔记”如此爱不释手?

Java架构师迁哥

HDFS的动态扩容及动态缩容

五分钟学大数据

hadoop hdfs 4月日更

iOS 面试策略之算法基础4-5节

iOSer

ios 面试 算法面经 算法解析

程序员快乐的一天!

BinTools图尔兹

程序员 运维 开发 dba 数据库管理工具

portal 认证 - 下线流程

箭上有毒

4月日更

图查询语言的历史回顾短文

NebulaGraph

数据库 数据库设计 图数据库

Nacos 2.0 性能提升十倍,贡献者 80% 以上来自阿里之外

阿里巴巴云原生

微服务 开发者 云原生 dubbo 中间件

汽车之家基于 Flink 的数据传输平台的设计与实践

Apache Flink

flink

2021年5个最佳YouTube视频下载器

科技猫

软件 工具 网站 分享 下载youtube视频

科技赋能快餐零售商突破瓶颈:英特尔AI技术助力汉堡王打造保护顾客隐私的订单推荐系统

E科讯

如何用 Electron + WebRTC 开发一个跨平台的视频会议应用

阿里云视频云

阿里云 音视频 WebRTC Electron 视频云

有道写作浏览器扩展实践

有道技术团队

大前端 浏览器 有道云笔记

Spark数据倾斜解决方案

大数据技术指南

spark 4月日更

Substrate 合约书之合约模型

Patract

智能合约 rust polkadot Patract Wasm

融云 CTO 杨攀:技术人员如何创业?

Yano

Java该怎么学?阿里大佬呕心沥血之作,Java全线成长宝典,从P5到P8一应俱全

Java架构师迁哥

涨薪5K的Java虚拟机:垃圾回收,Serial GC,卡表你想学吗?

小Q

Java 学习 面试 JVM GC

勇夺桂冠!百度智能云获山东电力输电人工智能技术竞赛第一名

百度大脑

百度智能云

微服务转型系列2:微服务转型的三大误区,避坑指南

BoCloud博云

微服务

进公司不会用 Git 拉项目!第二天被开除?

Java架构师迁哥

Java开发9年经验,三轮技术面+HR面试成功砍下阿里巴巴Offer!

Java架构追梦

Java 阿里巴巴 架构 面试

浅析“分布式锁”的实现方式丨C++后端开发丨底层原理

Linux服务器开发

redis zookeeper 分布式锁 Linux服务器开发 C++后端开发

数据虚拟化引擎openLooKeng介绍

openLooKeng

大数据 数据分析 Bigdata

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