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

本文共 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://ulgol.baihongyu.com/

你可能感兴趣的文章
JS检测JRE
查看>>
Ant_的最完整build.xml解释
查看>>
ubuntu 恢复模式修改文件提示readouly
查看>>
关于蘑菇街的TeamTalk分析
查看>>
golang将byte的int转换
查看>>
一些 timeit 数据
查看>>
第5课 skymvc的session及cookie的使用
查看>>
数据库连接池
查看>>
SGU题目列表(按照AC人数排序)
查看>>
Navicat Report Viewer 设置 HTTP 的方法
查看>>
Android中流行的第三方库资源收集
查看>>
与局域网共享有关的服务
查看>>
SQL优化
查看>>
Linux僵尸网络Mayhem通过Shellshock漏洞传播
查看>>
js 获取radio按钮值的实例
查看>>
dwr 3.0 配置 + 不同参数,不同返回值调用方法 示例
查看>>
C语言要掌握的几个库
查看>>
如何在Android手机中开发QQ账户登陆功能的应用
查看>>
程序猿平时都要积累什么?
查看>>
uiautomator2 使用Python测试 Android应用
查看>>