本文转载自微信公众号“DotNET技术圈”,作者邹希源。转载本文请联系DotNET技术圈公众号。介绍不久前看到一个故事。某年,宁波交警引进人脸识别技术抓拍行人闯红灯。结果,珠海女子董女士被查出是一天内闯红灯次数最多的人。她每天闯红灯3000多次。宁波交警连夜研究抓捕方案,最终查明公交车上某核心产品广告被误判。这家制造公司号称掌握了核心。虽然不是每一款产品都是爆款,但这样的广告确实牢牢抓住了受众的眼球。简洁明了的广告,使产品更具鲜明的标签,形成其独特的品牌形象。最近,我看到一家大型汽车制造商。虽然业绩不是很好,但董事长的眼光还是让人佩服。在股东大会上,当有股东问到自己以往业绩不佳,是否有兴趣与某民族品牌在无人驾驶技术方面建立进一步的合作关系时,董事长也毫不犹豫地回答:“我不接受“来自xx的offer。无人驾驶整体解决方案需要将核心技术掌握在自己手中。”至于这家公司是否真正掌握了核心技术,有的读者可能是公司的产品用户,也可能是汽车行业的员工,甚至是股东,可能比较清楚,小编比较好,了解的不多关于这个核心技术,但是小编从这两个案例中发现了一个现象,核心技术对于公司和个人来说都是非常有价值的关键特性,掌握了核心技术的开发者一定是逃过一劫的专业开发者从低层利益出发,面对纷繁复杂的互联网时代,他往往有更多机会展现自己的才能,获得与实力相匹配的待遇,掌握核心技术无疑也是如此。C#那么,问题来了,C#的核心技术是什么?我们如何掌握C#的核心技术呢?众所周知,C#是由伟大的程序员大神AndersHejlsberg创造的,体现了C#的先进性。.NET技术是一种优秀的语言。说起AndersHejlsberg,虽然有些读者可能不太熟悉,但是说到他创造的几种语言或者说编译器,大家想必都不陌生。例如,他在20岁时,仅用了两三个星期就开发出了Pascal编译器。后来他开发了Delphi,这是一门非常神奇的语言。在面向过程开发方式的时代,Delphi可以用VB独占半边天。显然,它的优秀并不是三言两语能说清楚的。当时很多开发者都非常善于用它创造奇迹。比如今天的产品大神张小龙,30年前就用它开发了foxmail。据说早期的wps也是用Delphi开发的。后来,Anders加入了微软,并设计了C#for.NET等优秀的语言。(当然,Anders并没有止步于C#的成就,在C#之后,他又改进了Javascript,带来了今天的“后端噩梦”TypeScript语言。)2002年,C#与.NET战略一起发布,一直定位于从一开始作为.NET开发框架的核心,到今天已经成为比较优秀的主流技术语言。该语言吸收了其他语言的优点,同时结合.??NET框架的特点实现了许多优雅的功能。今天的C#不仅可以用于传统的面向对象开发,还广泛用于函数式开发方式。.对于初学者来说,如果学过Java和C++语言,是非常容易上手的。经过近20年的发展,C#语言已经迭代了15个大版本,从最早的C#1.0到最新的9.0,以及10.0预览版,一共发布了6个正式版发布。对于很多开发者来说,每一次版本升级也意味着技术端又要重新刷新一次,这真是一个痛并快乐着的过程。回顾这么多版本,你还记得哪些C#“核心技术”给你带来了开发效率的巨大提升吗?《C#8.0核心技术指南》中的核心技术最近,有幸阅读了最新出版的《C#8.0核心技术指南》,并在本文中提取了几个与C#相关的新特性和概念,与大家分享。当然,由于C#实际上是.NETframework的主要语言,所以下面介绍的一些核心技术实际上也可能是.NETframework的核心技术,所以大家不必担心这个问题。C#9.0的新特性见https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9。C#8.0的新特性可以参考https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-8C#可空类型3.1可空值类型可空值类型是针对In基本类型的术语,例如Int?布尔?双倍的?这些基本类型是常用的可空值类型。这种类型出现的比较早,nullable值类型在C#2.0就已经出现了。检查可空值类型的实例从C#7.0开始,您可以使用is表达式来检查可空值类型,int?a=42;if(aisintvalueOfA){Console.WriteLine($"ais{valueOfA}");}else{Console.WriteLine("adoesnothaveavalue");}//Output://ais42当然,你仍然可以使用HasValue类型来检查可空值类型。3.2C#可空引用类型可空值类型常用于数据库检查。此类型可用于确定对象是否为空。可空引用类型正好相反,它可以在一定程度上防止引用类型的值为空,以避免抛出“对象引用未添加到对象实例”空指针异常。该类型从C#8.0开始引入,包括“可为空引用类型”和“不可为空引用类型”两种方式,使您可以对引用类型变量的属性进行重要声明:引用不应为空。当变量不应为null时,编译器会强制执行规则以确保在不首先检查这些变量是否为null的情况下取消引用这些变量是安全的:变量必须初始化为非null值。永远不能为变量分配值null。引用可能为空。当一个变量可以为null时,编译器会强制执行不同的规则以确保您已正确检查null引用:只有当编译器可以保证该值不为null时,您才能取消引用该变量。这些变量可以用默认值null初始化,或者在其他代码中赋值null。类型为Null。例如,在常用语句中,我们可能会这样实现:voidfoo(string?s)=>Console.WriteLine(s.Length);一旦字符串为空,很容易导致空指针异常。可空上下文可空上下文允许对编译器解释引用类型变量的方式进行细粒度控制。可以使用.csproj文件中的Nullable元素为项目设置可为null的注释上下文和可为null的警告上下文。此元素配置编译器如何解释类??型的可空性以及它生成哪些警告。有效设置如下:启用:“启用”是一个可为空的注释上下文。“已启用”可为null的警告上下文。引用类型的变量,例如字符串,是“不可为空的”。启用所有可空性警告。警告:“已禁用”可为空的注释上下文。“已启用”可为null的警告上下文。引用类型的变量被“忽略”。启用所有可空性警告。annotations:'enabled'可为空的注释上下文。“已禁用”可为null的警告上下文。引用类型(例如字符串)的变量不可为空。禁用所有可空性警告。禁用:“禁用”可为空的注释上下文。“已禁用”可为null的警告上下文。引用类型的变量被“忽略”,就像早期版本的C#一样。禁用所有可空性警告。示例:XML复制
