千家信息网

C#7.1有哪些特性

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要讲解了"C#7.1有哪些特性",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#7.1有哪些特性"吧!自2003年以来,Microsoft首
千家信息网最后更新 2025年02月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时间同步服务器地址和端口 r语言数据库在调用 在网络安全概念里信息安全 sql数据库用什么保存真实数据 软件开发代码规范文档 互联网大会科技展阿里巴巴 数据库对关系进行水平分割 没有路由器的网络安全么 信息网络技术专业概论 1.7.2服务器核心 网络进销存软件开发 完整数据库设计设置三个用户 杭州软件开发公司收费 链接服务器无法提供行 济南云图网络技术有限公司 bzz 服务器ip 软件开发为什么需要建模型 网络安全法案例农村 辽宁推广软件开发是做什么的 计算机与网络技术上什么 要认证的wifi网络安全么 福州软件开发培训学校哪个好 统计流量 服务器 测绘数据库技术 软件开发有哪些专科学校 吉利车载网络技术介绍 分析型数据库和事务型数据库 江苏现代软件开发厂家报价
0