千家信息网

C#7.1有哪些特性

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章主要讲解了"C#7.1有哪些特性",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#7.1有哪些特性"吧!自2003年以来,Microsoft首
千家信息网最后更新 2025年12月04日C#7.1有哪些特性

这篇文章主要讲解了"C#7.1有哪些特性",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#7.1有哪些特性"吧!

自2003年以来,Microsoft首次考虑对C#使用带小数点后位数的版本。当前暂定下一个版本是C# 7.1,其中有望包括:异步Main函数(Async Main)、默认表达式(Default Expression)、推导元组名(Infer Tuple Names)和使用泛型的模式匹配(Pattern-matching with Generics)等。

异步Main函数

最让测试异步代码的开发人员沮丧的,无疑是控制台应用当前不支持异步入口点(EntryPoint)。虽然变通方法是编写多行样板代码,但是这样的模式依赖于对方法的非正常使用,难于理解。例如:

ublic static void Main(){    MainAsync().GetAwaiter().GetResult();}private static async Task MainAsync(){    ... // 程序主代码。}

为解决这个问题,在"异步Main函数建议"中,添加了如下四个新的函数签名,罗列了可能的入口点。

static Task Main()static TaskMain()static Task Main(string[])static TaskMain(string[])

如果代码中不存在另一个非异步Main函数,那么只要给出一个上述的入口点函数,编译器就会生成所需的样板代码。唯一的限制是需要向后兼容。

Microsoft曾考虑允许"async void Main()",但是这种做法会使编译器更复杂,并且Microsoft总体上并不鼓励在事件处理器之外使用"async void"。

默认值(即Nothing)

VB没有表示"null"的关键字,这是C#和VB间的一个微妙的差别。但是VB有一个关键字"Nothing"。在语言技术规范中,对该关键字给出了如下说明:

Nothing是一个特殊的常值。它没有类型,可转换为类型系统中的任意类型,也包括类型参数。在转换为某个特定类型后,它等价于该类型的默认值。

C#当前使用"default(T)"模式实现同一效果,但略为繁琐,尤其是类的名字很长时。C# 7.1中将提供一个"默认常值"(Default Literal),其描述为:

这一类型的表达式可通过常值转换为默认值或null值,隐式地转换为any类型。

该类型向默认常值的推理与向null常值推理的工作机制一样,除非允许any类型(不只是引用类型)。

在可以使用null的地方,通常也可以使用默认常值。这一做法被看成是C#建议中的一个倒退,可能因为人们通常会对两个非常类似的方法完成同一件事大皱眉头。在设计会议纪要中,就有人提出疑问:

我们是否正在挑起类型之争?

一个使用默认常值的例子如下:

ImmutableArrayx = default;return default;void Method(ImmutableArrayarrayOpt = default)var x = new[] { default, ImmutableArray.Create(y) };const int x = default;if (x == default)if (x is default)y = default as RefType //编译器告警:总是null。int i = default

下面例子给出的是对默认常值的非法使用:

const int? y = default;if (default == default)if (default is T)var i = defaultthrow default

后者无疑是一个C#设计上的奇特构件。在设计会议纪要中,给出了如下说法:

在C#中,允许开发人员抛出null。这会引发一个运行时错误,进而导致抛出一个NullReferenceException异常。因此,抛出NullReferenceException并非正大光明的,而是一种丑陋的模式。

完全没有理由允许抛出默认值。我们并不认为用户会感觉这是可行的,或是了解它的工作机制。

Microsoft并未引入默认常值,而是考虑通过扩展"null"实现同一效果。因为在VB中"nothing"和"null"是两个不同的关键词,所以在VB中可以这样做。即使不使用关键字,VB中也具有null的概念。因此,开发人员可以看到"NothingReferenceException"这样的异常。

感谢各位的阅读,以上就是"C#7.1有哪些特性"的内容了,经过本文的学习后,相信大家对C#7.1有哪些特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

类型 C# 函数 代码 关键 特性 关键字 模式 人员 入口 方法 编译器 学习 开发 编译 设计 两个 会议 会议纪要 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 海淀区质量软件开发平台 数据库调优增加索引 河北ntp网络时间服务器厂家 税务系统网络安全基本准则 2012服务器怎么开启多个界面 网络安全应急暨网络安全培训 魔兽世界pve好的服务器 深圳最大软件开发公司 合肥风掣网络技术有限公司 互联网软件开发包括什么条件 定位信息数据库设计 关闭服务器不安全的端口 数据库标记是什么意思 数字影棚软件开发 四举措 做好网络安全工作 西城区信息网络技术推广优点 数据库火车票务管理系统的 武汉萌出互联网科技 发送邮件服务器 思科编辑服务器网页 服务器安全防护系统哪个好 旗天科技转型互联网传媒 宁乡学习软件开发培训 中小学生正确接触网络安全讲座 2014网络安全宣传周 app软件开发网络公司哪家最好 通讯信息网络技术专业就业前景 abb招聘硕士软件开发工资 正泰集团 软件开发 app后台服务器什么语言
0