写点什么

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

评论

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

通义灵码用户说 | 编程智能体+MCP加持,秒查附近蜜雪冰城

阿里巴巴云原生

通义灵码

通义灵码用户说 | 编程智能体+MCP加持,秒查附近蜜雪冰城

阿里云云效

通义灵码 Qwen

谷云科技 iPaaS 成功入选Gartner 2025 API 管理市场指南

谷云科技RestCloud

AI API网关 集成平台 ipaas API 管理

启信宝联合六大数交所共同编制,《企业数据治理实践白皮书》发布

合合技术团队

人工智能 算法 大数据‘’

鸿蒙商业化实战:IAP Kit构建安全文档付费体系

huafushutong

HarmonyOS SDK应用服务

超实用!SpringAI提示词的4种神级用法

电子尖叫食人鱼

数据库 前端

ITSM 与自动化联动,让运维工作轻松翻倍

智象科技

自动化 ITSM 自动化运维 一体化运维

什么是OA 系统?OA 系统要具备什么样的功能?

积木链小链

数字化转型 智能制造 OA系统

鸿蒙智能文档治理实战:File Manager Service Kit实现企业级文件管理

huafushutong

HarmonyOS SDK应用服务

鸿蒙健康守护实战:Health Service Kit实现智能文档工作监护

huafushutong

HarmonyOS SDK应用服务

鸿蒙实时协同实战:Live View Kit打造沉浸式文档批注系统

huafushutong

HarmonyOS SDK应用服务

鸿蒙智能提醒实战:Notification Kit实现文档关键节点零遗漏

huafushutong

什么是链游,链游系统开发价格以及方案

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

鸿蒙互动化实战:Game Service Kit重塑文档学习体验

huafushutong

HarmonyOS NEXT

编程简单了,部署依旧很难|Karpathy 演讲的 5 点解读

阿里巴巴云原生

阿里云 云原生

FORCE 开发者论坛 | 火山引擎发布多款 Agent 开发工具

火山引擎开发者社区

火山引擎

枫清科技受邀参加2025数据智能大会

Fabarta

人工智能 科技 数据智能大会

如何系统化搭建超智融合算力架构 | 龙蜥大讲堂

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥大讲堂 超智融合算力

鸿蒙安全共享实战:Share Kit实现文档一键安全分发

huafushutong

vRDMA 发布,助力云上 VPC 内高性能通信

火山引擎开发者社区

火山引擎

鸿蒙文档预检实战:Preview Kit实现合同风险智能预判

huafushutong

鸿蒙智能催办实战:Push Kit实现文档流程零延迟推进

huafushutong

鸿蒙地理围栏实战:Location Kit实现智能文档地理围栏

huafushutong

HarmonyOS SDK应用服务

鸿蒙地理可视化实战:Map Kit实现智能文档位置洞察

huafushutong

HarmonyOS SDK应用服务

鸿蒙支付安全实战:Payment Kit构建文档服务可信交易体系

huafushutong

鸿蒙PDF引擎实战:PDF Kit实现亿级文档极速渲染

huafushutong

鸿蒙文档解析实战:Reader Kit实现合同智能解构

huafushutong

鸿蒙场景融合实战:Scenario Fusion Kit实现跨文档智能关联

huafushutong

KubeEdge 1.21.0版本发布!节点任务框架全面升级!

华为云原生团队

云计算 容器 云原生

语音生成+情感复刻,Cosyvoice2.0 极简云端部署

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

IDM使用教程之如何下载网页中的视频资源,电脑网页上的视频怎么保存到本地

阿拉灯神丁

视频下载器 内容嗅探 IDM 网页视频下载工具 如何下载网页视频

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