写点什么

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

评论

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

【我和openGauss的故事】可视化运维平台openGauss Datakit带你轻松玩转openGauss

daydayup

openGauss数据库源码解析系列文章—安全管理源码解析(五)

daydayup

MTK 2.9.2 迁移Oracle 11g 至 openGauss 5.0.0操作指南

daydayup

Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

NebulaGraph

AI Jupyter Notebook 图数据库

融云:从「对话框」跳进魔法世界,AIGC 带给社交的新范式

融云 RongCloud

人工智能 AI 通信 社交 AIGC

ThreadLocal

红袖添香

Java ThreadLocal ThreadLocalMap Java 线程

技术分享 | Selenium多浏览器处理

霍格沃兹测试开发学社

【我和openGauss的故事】带有out参数的存储过程及自定义函数的重载测试

daydayup

【我和openGauss的故事】openGauss 5.0.0企业版x86单机安装

daydayup

8月征文:今天你 ARTS 打卡了吗?【中奖名单见文末】

InfoQ写作社区官方

ARTS 打卡计划 征文活动 热门活动

技术分享 | 测试平台开发-前端开发之Vue.js 框架

霍格沃兹测试开发学社

倒计时2天 | 第六届openGauss技术文章征集活动最新初审合格名单(截至8.3)

daydayup

接口测试实战| GET/POST 请求区别详解

霍格沃兹测试开发学社

Uiautomator2.0

霍格沃兹测试开发学社

技术分享 | app自动化测试(Android)--高级定位技巧

霍格沃兹测试开发学社

【我和openGauss的故事】使用Ora2Pg迁移oracle数据到openGauss

daydayup

瓴羊Quick BI在Gartner魔力象限中脱颖而出

夜雨微澜

干货|app自动化测试之Capability 使用进阶

霍格沃兹测试开发学社

瓴羊Quick BI:数据大屏可视化展示,助企业提升竞争优势

巷子

软件测试/测试开发丨Python 内置库 json

测试人

Python json 软件测试

自动化实践-全量Json对比在技改需求提效实践

得物技术

json 自动化 测试 企业号 8 月 PK 榜

测试必会 Docker 实战(一):掌握高频命令,夯实内功基础

霍格沃兹测试开发学社

干货|app自动化测试之Appium问题分析及定位

霍格沃兹测试开发学社

悦数图数据库:发布 AI 大模型解决方案,开启「图+ 大模型」应用新范式

悦数图数据库

数据库 图数据库 分布式图数据库 NebulaGraph 悦数

【我和openGauss的故事】在vm中安装openEuler及使用yum安装openGauss

daydayup

【我和openGauss的故事】为集群增加VIP

daydayup

鸿蒙生态加持 华为视频AiMax影院高品质再升级

最新动态

不可错过!12个编写整洁Java代码的最佳实践方法

飞算JavaAI开发助手

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