QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

评论

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

公安合成作战平台建设解决方案,情指勤一体化合成作战系统搭建

电微13828808271

TDengine典型用户案例|内容合集

TDengine

tdengine 时序数据库 技术专题合集

低代码如何让中小型企业蓬勃发展?

低代码小观

低代码 企业管理系统 低代码平台 中小企业

哪些企业需要做等保测评?快速过等保测评用什么堡垒机好呢?

行云管家

网络安全 等保 等保测评 等保2.0

CSS之选择器(七):empty

Augus

CSS 12月日更

Istio在Rainbond Service Mesh体系下的落地实践

北京好雨科技有限公司

istio PaaS rainbond

Explore the Sky丨来 TiDB Hackathon 2021 探索无限可能

PingCAP

Go 数据库 hackathon TiDB database

一周信创舆情观察(12.6~12.12)

统小信uos

黑客进行网络欺骗攻击的手段有哪些?

喀拉峻

黑客 网络安全 安全

Rainbond 5.5 发布,支持Istio和扩展第三方Service Mesh框架

北京好雨科技有限公司

istio PaaS rainbond

【量化】用数据验证巴菲特推荐的指数定投的收益真相

恒生LIGHT云社区

数据 金融科技 量化投资 量化

「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配

尔达Erda

大数据 spark 程序员 云原生 心得

基于社交网络的客户智能 ( AI ) 推荐系统研究

索信达控股

推荐系统 推荐算法 个性化推荐

质量基础设施一站式服务平台建设,检验检测系统平台开发搭建

电微13828808271

聚势聚能,共擎共飞 PKS安全先进计算2021生态大会将启

InfoQ 天津

DotNet项目利用拦截器记录访问日志

为自己带盐

日志 dotnet 28天写作 12月日更

自身的强大,无惧任何威胁!

Tiger

28天写作

行业分析| 泛娱乐应用出海探索

anyRTC开发者

音视频 语音通话 视频直播 视频通话 泛娱乐

利用Java反射处理private变量

FunTester

Java 工具 反射 Groovy FunTester

使用kubernetes,你真的降本了吗

Geek_cd6rkj

Docker Kubernetes 云原生 成本治理 提效降本

Android C++系列:Linux Socket编程(三)CS模型示例

轻口味

28天写作 12月日更

滨海中小企业协会参加新区工商联(总商会)第四次代表大会

InfoQ 天津

公安情报研判分析系统开发,情指勤一体化实战平台

电微13828808271

【实战】网络安全学习:内网渗透实例

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 内网渗透

西南林业大学:用宜搭打造智慧校园,节省百万费用

一只大光圈

钉钉 低代码 数字化 高校 钉钉宜搭

英特尔深耕元宇宙算力技术,剑指开“元”盛世

科技新消息

开发者故事|朝九晚六大小周,我就是快乐的技术人

尔达Erda

程序员 云原生 经验分享 成长笔记 思考路径

优秀的代码的分层结构

xcbeyond

架构 28天写作 12月日更

最好用的七大顶级 API 接口测试工具

蒋川

API 测试工具

从0开始学VUE - 运行第一个VUE项目

恒生LIGHT云社区

JavaScript node.js Vue 前端

企业数字化的4个痛点,低代码平台如何解决?

J2PaaS低代码平台

低代码 数字化 低代码平台

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