博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微软在C# 8中引入预览版可空引用类型
阅读量:7006 次
发布时间:2019-06-27

本文共 1161 字,大约阅读时间需要 3 分钟。

微软已经为开发者提供了预览版的可空引用类型(Nullable Reference Type),想尝鲜的开发者可以尝试这个新特性,并提供反馈。

\\

预览版可空引用类型是Visual Studio 2017 15.5 Preview 4+的Roslyn扩展,现在支持.NET框架,很快也将支持.NET Core。该特性在C# 8中是默认启用的。微软为此提供了。

\\

在C# 8中引入新的可空引用类型是为了解决十亿美元问题()。1965年,英国计算机科学家Tony Hoare在开发ALGOL时称其为空引用(Null Reference)。指针最主要的问题是,有时候它们会为空,而这并非我们所期望的。在将空指针作为一种特性引入之后,反而变成产生bug的主要源头。

\\

早在2011年,用户就在Visual Studio User Voice里要求“”,一年之后,经过投票,该需求排到了第15位,现在已经跑到了第一的位置上。这个特性之所以在很长一段时间内都无法实现,是因为C#的空引用到处可见。C#首席设计师Mads Torgersen解释说:

\\
\

问题是空引用太有用了。在C#里,引用类型默认就是空值。还能用其他什么值来作为默认值吗?在你知道该给一个变量赋什么值之前,拿什么作为它的默认值?一个新创建的引用数组又该使用怎样的默认值?

\\

有时候,空值本身也是有意义的。比如,有时候需要让一个字段不包含任何值,或者将空值作为参数进行传递也是没有问题的。但这些情况并不常见。这里还有另一个问题:像C#这样的语言并没有提供一种方式可以用于说明某处的空值是有意义的还是无意义的。

\
\\

为了避免在C#中引入不可空引用类型,微软将引用类型规定为默认不可空,并提供了一些机制用于处理可空类型。他们认为,大部分情况下引用类型都是非空或被间接引用的。Torgersen写道:

\\
\\t
  1. 我们相信,大部分情况下引用类型都不应该为空。可空引用类型是很罕见的(尽管很难说具体多罕见),所以需要单独对它们进行注解。\\t\t
  2. C#已经提供了可空的值类型(value type)。\\t\t
  3. 不应该让你自己或其他人在空值这个问题上有太多负担,除非你确定需要它们。空值应该是我们需要显式去指定的。\\t
\\

可空引用类型通过问号来定义,如下所示:

\\
\class Person {\  public string FirstName; // Not null\  public string? MiddleName; // May be null\  public string LastName; // Not null\}\
\\

微软希望开发者试用这个新特性,并提供。

\\

更多的信息可参考 、、。

\\

查看英文原文

转载地址:http://mvytl.baihongyu.com/

你可能感兴趣的文章
Android GreenDao常用注解
查看>>
二十分钟教你如何将区块链应用与函数计算相结合
查看>>
Bootstrap wysiwyg,将富文本数据保存到mysql
查看>>
Linux cron crontab用法(转载)
查看>>
Window 编译Openssl
查看>>
SAMBA 生产环境应用实例
查看>>
WPF - Group分组对ListBox等列表样式的约束
查看>>
Android 位置服务——BaiduLocation的使用
查看>>
源码专题之spring设计模式:单例模式
查看>>
WPF 将图片进行灰度处理
查看>>
用Intellij idea搭建solr调试环境
查看>>
你用过不写代码就能完成一个简单模块的组件么?
查看>>
js循环POST提交添加辅助单位
查看>>
solr6.6教程-从mysql数据库中导入数据(三)
查看>>
[OpenGL] glTranslatef(); glScaled(); glRotatef(); 函数介绍
查看>>
node 模块开发的一个小坑
查看>>
HTML5+CSS3 为 input 添加一键删除按钮
查看>>
03.Java基础(线程池和Callable<T>)
查看>>
Intellij IDE破解步骤
查看>>
git使用第一天,新建分支(sourceTree)
查看>>