设为首页 加入收藏

TOP

C#将引入可空的引用类型
2017-04-26 10:22:56 】 浏览:340
Tags:引入 空的 引用 类型

是的,标题没错。C#其中一份新提案假定,所有的引用类型在默认情况下都是不可空的。在新语法下,你需要显式地标明一个引用变量是可空的,就像对值类型所做的那样。


和值类型一样,T是指不可空类型,而T?是指可空类型。以下情况会产生警告:


对于前两种情况,如果你使用了感叹号运算符(x!)或者编译器能够证明已经执行了null检查,那么警告将被忽略。


底层编译器将会忽略可空注解,因此,那不是问题。不过,在程序集级,应该有某种标记,可以说明库在编译时启用了可空注解。


由于所有这类可空的东西从技术上讲都是一种破坏性修改,所以当前的计划是允许开发人员选择下面的类别:


提案继续写道:


根据预期,这种设计要达到以下三个目的:


对于同一个方法,你不必进行可空和不可空的重载。虽然从技术上讲,CLR支持这样做,但那不是CLS或者通用语言规范的组成部分。这意味着,大多数编译器都会不知道发生了什么。HaloFour作了如下说明:


在使用泛型时,以下情况会出现额外的警告:


使用“class”,则泛型强制非空。使用“class?”则允许空值。该提案继续写道:


数组是一项特殊的挑战,因为在一个不可为空的数组中,不一定可以确保每个槽都有一个值。


使用default(T)应该发出警告吗?还是说假定它会返回T?,而不是T?


可以删除局部变量上的?而根据使用情况推断其可空性吗?


参数可以使用T! x模式自动生成null检查吗?


可以调整一下可空值类型,以便让开发人员可以使用x.method代替x.Value.method吗(这用在当x已知非空时,比如已经成功完成了null检查)?


查看英文原文:C# Futures: Nullable Reference Types


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言中变量存储类别 下一篇Python实现裴波那契查找详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目