7月QCon广州站2022,关注Web 3.0、数据架构选型、数字化转型等热门话题,点击了解 了解详情
写点什么

Mono 为 C#添加了类型推断支持

  • 2007 年 7 月 05 日
  • 本文字数:924 字

    阅读完需:约 3 分钟

据 Marek Safar 称,通过使用一种名为类型推断(type inference)的技术, Mono 上的 C# 3.0 编译器现在已经能够支持隐式类型的局部变量以及隐式类型的数组了。

在“类 C”的语言,比如 C#中,我们经常使用类似“type variable = new type”这样略显冗余的办法来创建一个对象。若是变量的类型名称较长,或是会经常变化,那么这样的声明方法更是将显得非常乏味。

借助于最新引入的“var”关键字,C# 3.0 大大减小了这类冗余。通过这样的声明方式,开发者即可在得到动态创建类型便利的同时,也无须牺牲原有的静态类型支持。编译器将通过等号右面的类型信息来确定变量的实际类型。

需要注意的一点是,C#仍旧是早期绑定和静态类型的。类似 Visual Basic 这类延迟绑定(late binding)语言中的一些常见问题(比如由拼写错误造成的“missing method exception”)并不会在 C#中出现。

虽然看上去不错,不过添加类型推断却不只是为了提高开发者的那么一点点输入速度。类型推断是实现匿名类的一个必要的前提条件,而匿名类则在 LINQ 中被广 泛使用。因为匿名类并没有一个指定的类型名称,所以若是没有了类型推断的支持,我们就无法在 C#中创建该类型的实例。(VB 则是通过延迟绑定来实现的这个 功能,不过这也带来了“missing method exception”之类的问题。)

C#中支持两种类型推断:隐式类型变量和隐式类型数组。二者的实现基础完全相同,即在编译时将“var”替换成为分析得到的正确的变量或数组类型表达式。

若是变量的声明和赋值不在同一行书写的话,编译器将不允许我们使用类型推断。虽然从技术角度上考虑,实现这个功能没有什么困难,不过 C#编译器的开发团队可能是为了避免其带来的复杂性,所以并没有考虑支持这个功能。

Marek Safar 还提到了两个无法应用类型推断的场景。

故名思意,“隐式类型局部变量”将无法用于域变量或常量的声明中,否则将导致编译错误。

我无法确定为什么会设置这样的限制,或许我有些地方考虑得也不够全面。

注意:从技术角度考虑,匿名类也拥有类型名称,该类型名称是由编译器自动生成的。不过匿名类的名称却无法预料,因此我们只需要考虑其实现细节。换句话说,我们最好将匿名类的名称当作根本不存在。

查看英文原文: Mono Adds Support For Type Inference in C#

2007 年 7 月 05 日 05:49517
用户头像

发布了 37 篇内容, 共 71167 次阅读, 收获喜欢 3 次。

关注

评论

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

JAVA 百度地图 API

爱好编程进阶

Java 面试 后端开发

龙蜥大讲堂:如何利用硬件SIMD指令提升Java程序的性能?|第14期

OpenAnolis小助手

Java simd arm sig 龙蜥大讲堂

小程序运行时+SAAS级服务,提升研发降本增效作用

Speedoooo

flutter APP开发 SaaS平台 小程序容器 小程序运行时

Java-进阶:多线程2

爱好编程进阶

Java 面试 后端开发

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26

爱好编程进阶

Java 面试 后端开发

桌面运维工程师需要会哪些技能?主要是做什么的?

行云管家

云计算 运维 运维工程师 IT运维 云运维

K8S太火了!花10分钟玩转它不香么?

爱好编程进阶

Java 面试 后端开发

java高级用法之:JNA中的Structure

程序那些事

Java 程序那些事 JNA 4月月更

人人都可以学会的产品手册制作方法

小炮

产品宣传手册

java并发锁ReentrantLock源码分析二之Condition实现原理

爱好编程进阶

Java 面试 后端开发

一起来试玩!在线可编程交互的实时音视频 Web SDK 入门教程

声网

音视频 教程

鲸智WhaleBI 平民化数据消费还业务以真正的“数据自由”

鲸品堂

方法论 数据 数据治理

java冒泡排序的实现以及优化

爱好编程进阶

Java 面试 后端开发

Java反射

爱好编程进阶

Java 面试 后端开发

Java多线程-死锁的出现和解决

爱好编程进阶

Java 面试 后端开发

30个实用SQL语句,玩转PostgreSQL

慕枫技术笔记

数据库 后端 4月月更

Java并发编程(实战)

爱好编程进阶

Java 面试 后端开发

关于 WordPress 你了解多少?

海拥(haiyong.site)

4月月更

CrashSight异常崩溃管理解决方案

WeTest

java8 Stream API及常用方法

爱好编程进阶

Java 面试 后端开发

Flink整合ElasticSearch详细指南及踩坑记录

五分钟学大数据

4月月更

组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题

华为云开发者联盟

Serverless 无服务器 事件网格 组合式应用

Java 反射 getClass()

爱好编程进阶

Java 面试 后端开发

进程内优雅管理多个服务

万俊峰Kevin

微服务 RPC web开发 go-zero Go 语言

NFT数字藏品交易平台系统开发搭建

薇電13242772558

NFT 数字藏品

Java应用日志如何与Jaeger的trace关联

爱好编程进阶

Java 面试 后端开发

DDD实战(8):冲刺1战术之聚合设计

深清秋

DDD 软件架构 生鲜电商系统 4月月更

【云管平台】三大云管平台厂商详细介绍

行云管家

云计算 云管平台 云堡垒机 云厂商

华为云物联网高级攻城狮的4年配置中心实践分享

华为云开发者联盟

开源 DevOps 配置中心 Apollo 业务配置

Mono为C#添加了类型推断支持_.NET_Jonathan Allen_InfoQ精选文章