Data+AI时代,如何打造下一代数智平台? 了解详情
写点什么

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

评论

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

有一说一,阿里P7的薪资待遇是真的香

程序员小毕

Java 程序员 程序人生 后端 架构师

融云直播 SDK 玩法翻新,入围信通院「实时互动创新应用优秀案例」

融云 RongCloud

直播 sdk

面试OPPO,16道题甩过来,我人傻了

Java永远的神

Java 程序员 面试 分布式 项目

企业内部信息碎片化该怎么办?不妨试试这样做

Baklib

B站713事故后的多活容灾建设|TakinTalks大咖分享

TakinTalks稳定性社区

故障 稳定性保障

【刷题记录】22. 括号生成

WangNing

7月月更

3分钟创建Serverless Job 定时获取新闻热搜

云端explorer

Serverless Job 新闻热搜 场景搭建

洋葱集团携手OceanBase实现分布式升级,全球数据首次实现跨云融合

OceanBase 数据库

中天钢铁在 GPS、 AIS 调度中使用 TDengine

TDengine

数据库 tdengine 时序数据库

低代码工具有哪些特色?明眼人都能看出来的低代码两大发展轨迹!

优秀

低代码 低代码平台

工赋开发者社区 | 定了!就在7月30日!

工赋开发者社区

技术分享 工业 峰会

聊聊css中文字的换行问题

南极一块修炼千年的大冰块

7月月更

如何在github的pages部署hexo实现代码提交到仓库自动部署

娃娃菜

GitHub Pages 签约计划第三季

客户案例|生学教育依托观测云打造可观测智慧教育新生态

观测云

2022最新最全Java面试八股文(整整1685页,14个技术栈,20余万字)

Java全栈架构师

Java spring 面试 JVM 消息中间件

基础+框架+数据库+系统设计+算法,2022阿里最新Java面试突击手册我粉了

Java永远的神

Java 数据库 spring 面试 JVM

阿里云消息队列 Kafka-消息检索实践

阿里巴巴云原生

kafka 阿里云 云原生 检索 消息

唠唠python的作用域,看看每个变量都为自己打下了多少江山

迷彩

Python 函数 作用域 7月月更

Web3.0 时代,基于P2PDB实现一款Dapp的技术理论

Rock-李益

dapp 去中心化 去中心化数据库 p2pdb

模块八作业 - 消息数据 MySQL 表设计

Elvis FAN

知识管理系统是什么?你需要知道这些

Geek_da0866

企业数字化转型成大趋势,选对在线协作工具很重要

Baklib

一文讲清楚SpringBoot六种读取配置方式

王小凡

Java 程序员 Sprint Boot

如何组装一个注册中心

捉虫大师

注册中心 7月月更 后端启示录

发评测赢好礼 | Serverless 函数计算征集令

阿里巴巴云原生

阿里云 Serverless 云原生

人工智能助力复工复产,模版 OCR 轻松搞定健康码识别

亚马逊云科技 (Amazon Web Services)

人工智能 Lambda

菜鸟 CPaaS 平台微服务治理实践

阿里巴巴云原生

阿里云 微服务 云原生 CPaaS 菜鸟

RocketMQ—(总结)一篇就搞懂RocketMQ

IT巅峰技术

客户案例 | 聚焦流程体验,助银行企业APP迭代

易观分析

银行 客户 银行app

SpringBoot应用使用Docker实现远程部署(保姆教程)

技术小生

Docker 7月月更

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