湖南自考网站建设与管理非物质文化遗产网站怎么做
web/
2025/9/30 14:30:47/
文章来源:
湖南自考网站建设与管理,非物质文化遗产网站怎么做,网站建设与管理适合女生学吗,谷歌seo专员是指什么意思是的#xff0c;标题没错。C#其中一份新提案假定#xff0c;所有的引用类型在默认情况下都是不可空的。在新语法下#xff0c;你需要显式地标明一个引用变量是可空的#xff0c;就像对值类型所做的那样。
和值类型一样#xff0c;T是指不可空类型#xff0c;而T?是指可…是的标题没错。C#其中一份新提案假定所有的引用类型在默认情况下都是不可空的。在新语法下你需要显式地标明一个引用变量是可空的就像对值类型所做的那样。
和值类型一样T是指不可空类型而T?是指可空类型。以下情况会产生警告
取消对可空变量的引用一个可空变量或参数被赋值给一个不可空变量从T?[]转换到T[]从T[]转换到T?[]将一个空字面量赋值给一个不可空变量或参数构造函数没有给所有的不可空字段赋值
对于前两种情况如果你使用了感叹号运算符x!或者编译器能够证明已经执行了null检查那么警告将被忽略。
实现细节
底层编译器将会忽略可空注解因此那不是问题。不过在程序集级应该有某种标记可以说明库在编译时启用了可空注解。
由于所有这类可空的东西从技术上讲都是一种破坏性修改所以当前的计划是允许开发人员选择下面的类别
可空警告不可空警告警告来自其他文件中的注解。
提案继续写道
选择参与的粒度表明这是一个类似分析器的模型大段的代码通过编译指令选择参与和退出用户可以选择安全级别。此外每个库的选项“在准备好应对后果之前忽略JSON.NET中的注解”可以表示为代码中的属性。
根据预期这种设计要达到以下三个目的
用户可以像他们希望的那样逐步采用可空属性检查库作者可以添加可空属性注解而不必担心破坏用户的代码除此之外没有“配置噩梦”之感。
对于同一个方法你不必进行可空和不可空的重载。虽然从技术上讲CLR支持这样做但那不是CLS或者通用语言规范的组成部分。这意味着大多数编译器都会不知道发生了什么。HaloFour作了如下说明
modreq不是CLS。modopt确实支持重载但需要具体了解所有重要编译器的这个部分因为至少要将修饰符复制到调用签名里。两者都会破坏与现有方法签名的兼容。对于希望在整个BCL快速传播的东西来说使用modopt会成为巨大的障碍。
泛型
在使用泛型时以下情况会出现额外的警告
从CT转换到CT?除非类型参数是协变量出从CT?转换到CT除非类型参数是反变量入使用CT?然后将类型参数限制为不可为空。
使用“class”则泛型强制非空。使用“class?”则允许空值。该提案继续写道
如果一个类型参数没有约束或者只有可空约束则情况会稍微复杂一些这意味着相应的类型参数既可以为空也可以不为空。在那种情况下安全的做法是将类型参数既作为可空参数来处理又作为不可空参数来处理任何一个不满足就发出警告。
数组
数组是一项特殊的挑战因为在一个不可为空的数组中不一定可以确保每个槽都有一个值。
对于一个非空引用数组我们无法通过充分地跟踪来保证数组的所有元素都被初始化。不过在从数组读取数据或者传递数组之前如果新创建的数组没有元素被赋值我们就会发出警告。那应该可以处理常见的情况而又不带来太多干扰。
开放性设计问题
使用default(T)应该发出警告吗还是说假定它会返回T?而不是T
可以删除局部变量上的?而根据使用情况推断其可空性吗
参数可以使用T! x模式自动生成null检查吗
可以调整一下可空值类型以便让开发人员可以使用x.method代替x.Value.method吗这用在当x已知非空时比如已经成功完成了null检查
原文地址http://www.infoq.com/cn/news/2017/04/CSharp-Nullable .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84498.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!