2019年了,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<T>系列类型得以引入从而改善了特定场景的性能。更重要的是这些语言层面上的改进使得类库作者可以写出特定场景的高性能代码而避免引入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最开始的愿景在细节上有些偏差。但是我认为未来本来就不会用生态和语言来划分程序员……

原文地址:https://www.zhihu.com/question/321350186/answer/672775689

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软宣布新命令行工具 Windows Terminal 和 WSL2

微软在 Build 2019 已经宣布推出名为Windows Terminal的新款命令行工具 , 这款工具可以访问多种环境的中心位置。例如可以直接访问PowerShell、CMD.EXE、Windows Linux子系统等等&#xff0c;开发者使用此工具可以简化工作。这款新工具支持多选项卡同时连接多个环境或服务器&a…

CF1305E Kuroni and the Score Distribution

CF1305E Kuroni and the Score Distribution 题意&#xff1a; 题解&#xff1a; 一开始想这个题&#xff0c;想法是一开始顺着填1&#xff0c;2&#xff0c;3…然后多删少补 如果1&#xff0c;2&#xff0c;3&#xff0c;4…这样顺延的填&#xff0c;对于akka_{k}kak​k可以…

微软 Build 2019:Windows 10 隐退,IE 重生,Azure 成主角

019 年 5 月 6 日&#xff0c;一年一度的微软 Build 开发者大会正式到来。作为本次大会最为重磅的 Keynote 环节&#xff0c;微软 CEO Satya Nadella 的开场演讲无疑展示了这家巨头对于未来科技发展趋势的洞察和判断&#xff0c;并且也能够让人更加清晰地看到微软在 Azure 云计…

普通人看Build 2019 值得留心的亮点有哪些?

一场Keynote下来&#xff0c;是不是对纳德拉那套“Azure&#xff0c;azure&#xff0c;azure”&#xff0c;云云云的套路感觉有些乏味呢&#xff1f;当然这也不是你的问题&#xff0c;原本Build大会就是为开发者而设的&#xff0c;将近两个小时下来没看到什么能让自己眼前一亮的…

Build 2019:微软正式宣布 .NET 5

今天&#xff0c;我们宣布 .NET Core 3.0 之后的下一个版本将是 .NET 5 。这将是 .NET 系列的下一个重要版本。将来只会有一个 .NET &#xff0c;您将能够使用它来开发 Windows&#xff0c;Linux&#xff0c;macOS&#xff0c;iOS&#xff0c;Android&#xff0c;tvOS&#xff…

LGV定理

老早就听说&#xff0c;一直没学&#xff0c;今天遇到一个LGV比较裸的题&#xff0c;特地学习一下 选自oi-wiki 定义&#xff1a; e(u,v)表示u到v这条路径上所有边的边权之积(路径计数时&#xff0c;可以将边权都设为1),很多路径统计问题就是用到这一点 引理&#xff1a; 答案…

2019牛客多校Monotonic Matrix

Monotonic Matrix 题意&#xff1a; 问有多少个n * m的矩阵A满足一下情况&#xff1a;答案mod 1e97 矩阵A的所有元素∈{0,1,2}Ai,j<Ai1,jA_{i,j}<A_{i1,j}Ai,j​<Ai1,j​Ai,j<Ai,j1A_{i,j}<A_{i,j1}Ai,j​<Ai,j1​ 题解&#xff1a; 我们先看看这个式子…

WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发&#xff0c;是时候总结一下了。Caliburn.Micro(https://blog.csdn.net/lzuacm/article/details/78886436)是一个轻量级的WPF框架&#xff0c;简化了WPF中的不少用法&#xff0c;推荐做WPF开发时优先使用。真…

微软全都要!Win10引入真Linux内核

继将 Bash shell、原生 OpenSSH、WSL 引入 Windows&#xff0c;以及在微软商店提供 Ubuntu、SUSE Linux 和 Fedora 等发行版&#xff0c;正在举办的 Microsoft Build 2019 大会上&#xff0c;微软又宣布了一个重大的决定 —— 将完整的 Linux 内核引入 Windows 10。按照微软的说…

Kafka基本知识整理

首先Kafka是一个分布式消息队列中间件&#xff0c;Apache顶级项目&#xff0c;https://kafka.apache.org/ 高性能、持久化、多副本备份、横向扩展。生产者Producer往队列里发送消息&#xff0c;消费者Consumer从队列里消费消息&#xff0c;然后进行业务逻辑。应用场景主要有&…

牛客练习赛89——牛牛小数点(未解决)

牛牛小数点 题意&#xff1a; 题解&#xff1a; 本题先说结论&#xff1a; 对于一个数x2a∗5b∗px2^a*5^b*px2a∗5b∗p 如果p1,也就是质因子只有2和5&#xff0c;则x是不循环小数&#xff0c;即f(x)0如果p!1,则x是循环的&#xff0c;且循环开始于小数点后第1max{p2,p5p_{2},…

针对.NET Core, Xamarin以及.NET的自动类型安全Rest库: Refit

本文大部分内容是针对Refit官网的翻译。官网地址&#xff1a; https://github.com/reactiveui/refitRefit是一个类似于Retrofit的Restful Api库&#xff0c;使用它&#xff0c;你可以将你的Restful Api定义在接口中。例如&#xff1a;public interface IGitHubApi { [Get(&quo…

用ProGet搭建本地私有NuGet仓库

搭建ProGet下载官网下载Windows版本的Inedo Hub &#xff08;https://inedo.com/proget/download&#xff09;下载下来的软件名&#xff1a; ProGetInstaller.exe安装点击ProGetInstaller.exe&#xff0c;出现如下安装界面Registration 选项选择 Free ;SQL Sever 选项选择 Spec…

CQRS架构下Equinox开源项目分析

一.DDD分层架构介绍本篇分析CQRS架构下的Equinox开源项目。该项目在github上star占有2.4k。便决定分析Equinox项目来学习下CQRS架构。再讲CQRS架构时&#xff0c;先简述下DDD风格&#xff0c;在DDD分层架构中&#xff0c;一般包含表现层、应用程序层(应用服务层)、领域层(领域服…

仿B站(一) 目的分析以及创建 WebAPI + Angular7 项目

前言&#xff1a;本系列文章主要为对所学 Angular 框架的一次微小的实践&#xff0c;对 b站页面作简单的模仿。本系列文章主要参考资料&#xff1a;微软文档&#xff1a;    https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?viewaspnetcore-2.1&tabsw…

Mac中搭建Kubernetes

Kubernetes是Google和RadHat公司共同主导的开源容器编排项目&#xff0c;功能非常强大&#xff0c;也非常的火热和流行&#xff0c;但同时里面也有很多的概念和名词需要我们去学习和理解。学习任何一个技术先需要把基础环境搭建起来&#xff0c;本篇就介绍怎样在Mac中启动单节点…

树莓派也跑Docker和.NET Core

树莓派就是一个卡片大小的迷你电脑。有了电脑&#xff0c;我们当然得先安装系统。系统下载https://www.raspberrypi.org/downloads/raspbian/ &#xff0c;我选择的Raspbian Stretch Lite&#xff0c;不带界面的最小安装。下载win32diskimager&#xff08;烧录系统&#xff09;…

开源]OSharpNS 步步为营系列 - 1. 业务模块设计

OSharpNS全称OSharp Framework with .NetStandard2.0&#xff0c;是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架。这个框架使用最新稳定版的.NetCore SDK&#xff08;当前是.NET Core 2.2&#xff09;&#xff0c;对 AspNetCore 的配置、依赖注入、日志、缓存、实体…

CF1479A Searching Local Minimum

CF1479A Searching Local Minimum 题意&#xff1a; 题解&#xff1a; 先说结论&#xff1a; 若l&#xff0c;r满足&#xff1a; al−1>al,ar<ar1a_{l-1}>a_{l},a_{r}<a_{r1}al−1​>al​,ar​<ar1​al,al1,....,ara_{l},a_{l1},....,a_{r}al​,al1​,....…

C#8.0的两个有趣的新特性以及gRPC

最近每天忙着跑很多地方&#xff0c;回家就不想动了&#xff0c;没什么心情写东西。今天有空&#xff0c;稍微写一点。下文中&#xff1a;关于C#语法特性的部分需要Visual Studio 2019支持。关于.NET Core的部分需要安装.NET 3.0 Preview4&#xff0c;低版本或许也可以但我没实…