已是 9102 年,你熟知的 C# 还是你刚认识的模样吗?

栏目: ASP.NET · 发布时间: 5年前

内容简介:编者注:来到 9102 年,熟知 C# 的开发者,你对 C# 的认识还是之前你认识她的模样吗?不熟悉 C# 的开发者,你想知道现在的 C# 都有哪些与时俱进的黑科技吗?以下是来自知乎的 Ivony 的 .NET 开发者为你讲述

编者注:来到 9102 年,熟知 C# 的开发者,你对 C# 的认识还是之前你认识她的模样吗?不熟悉 C# 的开发者,你想知道现在的 C# 都有哪些与时俱进的黑科技吗?

以下是来自知乎的 Ivony 的 .NET 开发者为你讲述 《2019年了,C#发展的怎么样了呢?》

已是 9102 年,你熟知的 C# 还是你刚认识的模样吗?

----------

简单讲讲:

C# 8.0

我估计大多数 程序员 对于C# 5.0之后的改进都没有什么太多的认知,的确从C# 5.0开始C#已经没什么太多东西可以从其他语言借鉴,Anders 的重心也开始逐步倾斜到TypeScript,所以从 5.0 引入 async 之后 C# 语言发展速度开始减缓了。

C#6引入了大量的语法糖,例如?.和$""等等都是6.0引入的,这些东西极大的简化了C#的语法,而C#7.0则进一步的引入了元组、残破的模式匹配支持和本地函数以及意义深远的ref和readonly支持的扩大化,ref和readonly ref使得Span系列类型得以引入从而改善了特定场景的性能。更重要的是这些语言层面上的改进使得类库作者可以写出特定场景的高性能代码而避免引入C/C++。至于out变量声明和throw表达式则是早就该加入的东西并没有什么太多的悬念。

值得注意的是7.0开始搞出了小版本号的概念,C#7事实上有四个版本,C#7.0、7.1、7.2和7.3,

C#8.0将在2019年发布,主要的改进包括一个破坏性修改,可空引用类型,估计届时要启用这个特性需要加编译参数,或者可以用编译参数屏蔽这个特性。这个特性据说是从Kotlin借鉴过来的,这怕是C#出现18年来第二次从 Java 阵营借鉴(第一次是诞生)。

其他的改进则有相对完整的模式匹配支持(虽然还很丑,而且没有UnionType/SumType还是残废),以及接口默认实现方法(这个倒是Java发明的,用来取代C#当年的扩展方法的用途,然后被C#再抄回去)。语法层面上async stream和Range可以大大简化特定场景的语法。

.NET Core 3.0

很明显微软现在将重心放在了.NET Core这一边,当然.NET Framework历史包袱太多,如果我是微软的程序员也愿意把精力放在.NET Core的框架开发上。结果就是.NET Framework 4.8一直难产,而.NET Core则一路高歌从1.0演化到3.0。

为了平滑的迁移现有应用程序,微软在.NET Core上重新实现了大部分的.NET Framework的API,当然GUI的除外,尽管如此微软还是提供了GDI的部分API的实现也就是System.Drawing。

http://ASP.NET 部分则因为历史包袱太多被全部重写,事实上我非常赞成这一决定。尽管 http://ASP.NET Core是全部重写的,但是Razor和MVC的大部分语法和功能被保留下来,所以原有MVC的应用也能轻松迁移。不过,Razor的helper功能被移除仍然让我非常不爽。

新的TagHelper我认为是非常正确的道路,而事实上这就是十年前我的Jumony for MVC尝试做的事情。

平台/生态

最后聊聊平台和生态。

事实上 C#和Java就是一种语言…… 基本上你可以认为这两者的亲缘关系就像是JavaScript和TypeScript。所以说如果你会C#那是没有道理看不懂或者写不了Java代码的。当然反过来会有点麻烦(如果你会Kotlin的话,可能更有助于学会C#)。这就像你会TS肯定能看懂JS一样……

所以纠结语言是没有什么意义的,C#和Java的主要差别在于库函数,这也是目前阻碍两边程序员跨界的重要因素。Java哔一样的语法很多时候并不是我最难以忍受的,更难以忍受的是哔一样的基础类库。

在BCL这一块,微软是毋庸置疑的Top 1。当然,在互联网时代,微软的老派作风使得对新技术和新思想的响应速度不如开源社区,尤其是对 Linux 和开源社区并不明朗的态度,这使得.NET诞生的这十几年来一直未能取代Java,甚至让后者做大做强。

开源的精神内核是开放,作为一个老派的程序员(掐指一算入行都二十年了),我觉得开放的心态是我还能活跃在一线写代码的原因。Java开源社区有很多好东西,也经过了很多项目的检验,.NET其实也是可以用的,毕竟,其实C#本来就是从Java改进而来,他们之间的共同点比差异多太多了。互操作性也远比其他语言容易得多,他们都是把元数据嵌到程序集里面的。

我现在做.NET Core的应用,用Eureka和Consul做服务发现,用apollo做配置中心,所有这些都不是C#写的而是Java写的,但这丝毫没有任何问题。开源的生态本来就是开放的,在我看来,未来是各种语言混合互操作的天下,虽然和.NET最开始的愿景在细节上有些偏差。但是我认为未来本来就不会用生态和语言来划分程序员……

作者:Ivony

链接:https://www.zhihu.com/question/321350186/answer/672775689

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Eloquent JavaScript

Eloquent JavaScript

Marijn Haverbeke / No Starch Press / 2011-2-3 / USD 29.95

Eloquent JavaScript is a guide to JavaScript that focuses on good programming techniques rather than offering a mish-mash of cut-and-paste effects. The author teaches you how to leverage JavaScript's......一起来看看 《Eloquent JavaScript》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具