澳门新葡亰平台官网已是 9102 年,你熟知的 C# 还是你刚认识的模样吗?

by admin on 2020年2月29日

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

金融技术开发

DevOps for Finance (By O’Reilly) – 这是不是也值得我去看?


前言

澳门新葡亰平台官网,asp.net core rtm
6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet
core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章来帮助那些还在学习的朋友们吧。


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

服务器预先渲染

To improve initial load and SEO, it is prerendered on the server.


目录

  • dotnet core 和 .net的区别
  • github中dotnet core各个项目的状况

澳门新葡亰平台官网 1

Web服务开发

随着Web技术的快速发展,新的技术层出不穷,这使得Web程序的用户体验不断提升。最具代表性的就是SPA(Single
Page Application)应用。

技术的快速发展也有弊端,那就是学习成本的不断提升。作为一名开发人员,你需要不断学习、提升自己的技术以适应这个技术快速发展的时代,以让自己不在这个技术快速发展的洪流中所淘汰。

当然,我们的老大Microsoft也是如此,借着Asp.Net
Core的机会,发布了好几款集成目前流行的前端框架的Asp.Net
Core的模板。文章后边我就具体描述以一下。

你需要知道的东西

你需要明白的东西

  1. NodeJS,这是一个基于Chrome V8
    JavaScript引擎构建的JavaScript运行时的库,NPM就包含在NodeJS中,他具有强大的生态系统。

2.
NPM包管理器,是Node包生态系统的管理器。可以使用他安装Angular所有的包以及依赖包。

  1. DotNet
    CLI,这是微软提供的命令行接口工具。用于开发跨平台.NET程序的工具链。如果你安装了VS2017,默认应该已经安装DotNetCLI工具。

3.
AngularCLI,这是Angular官方发布的AngularCLI工具,可以使用他对Angular进行新建、编译、运行等操作。

  1. Asp.Net
    Core,这是微软推出的跨平台Web应用程序。功能强大。官方文档非常完善。

5.
TypeScript,这是一种类型化的JavaScript,可以通过他编译生成Javascript,Angular就是基于TypeScript的。

  1. RESTful
    API,这是一个很火热的Web应用程序API的设计理念。微软官网也写过一篇关于RESTful的文章,但实在太老了。于是用aisuhua的GitHub代替了

你需要了解的东西

1.
翻GFW,根据我国国情需要,GFW是“必须要有的”,这无可厚非。但是带来的问题就是开发人员的一手资料被屏蔽。所以你应该了解怎么翻GFW。

  1. 国内NPM源,之后会细说。

  2. WebPack,这是一个现代化的JavaScript模块打包器。具体内容可以去官网了解

也许有一些没有接触过以上提到的这些工具或知识的童鞋可能会一脸懵逼,但是不用担心也不用着急,本文会用最浅显易懂的方式告诉你如何配置。

我会aspnet,用过razor语言,但是现在好像选择面还有很多?想要做Web
API,用什么技术最适合我这种想实践自己系统思路的人!

– 关于angularjs和react,永远就像安卓和iOS的选择

– 关于angular是未来,angularjs(2)是现在。

2017年8月14日,.NET Core 2 发布,支持.NET 标准版 2.0 2,
本版本的核心要点是能够从 .NET Standard 引用 .NET Framework
库。这将有助于开发人员管理旧版代码,并简化代码从 .NET Framework 到 .NET
Standard 的转换。

最近发布的ASP.NET Core 2.0,连同新发布的.NET Core 2和Entity Framework
Core 2.0,一并构成了.NET Core
2.0生态中的三元组。此发布给出了多个新特性和改进,其中包括通用性能的改进、Razor页面、新的开发模板以及更好的Azure
Diagnostics支持。

让我们首先看一下Razor页面。Razor页面类似于标准的MVC视图,只是通过使用@Page指令标明自身为Razor页面。Microsoft现在考虑将Razor页面作为ASP.NET
Core中构建Web应用UI的推荐方法,当然开发人员也可自由地选择最适合自己的方法。使用Razor页面编写的Web页面,无需经过控制器即可直接处理请求,正如在标准的ASP.NET
MVC应用中那样。

转向ASP.NET Core
2平台的另一个好处是简化了对软件包的引用。在项目的.csproj文件中,仅需引用Microsoft.AspNetCore.All。这是一个Meta-package,它在简化了引用问题的同时,确保应用所需的所有库是可用的。而在发布Web应用时,只有应用所需的库才会与应用一并发布,避免了文件膨胀。另一个优点是Meta-package可使应用的启动速度更快,这是因为它使用了.NET
Core Runtime
Store,其中预编译了所有的软件包和文件。虽然这一Meta-package提供了一种便利的软件包引用方式,但是开发人员依然可以继续在Microsoft.AspNetCore.*中直接引用特定的软件包。

为了支持新的特性,ASP.NET Core
2扩充一些模板,它们来自于Razore页面(模板命名为“Web Application”)、Web
API、基于MVC的Web应用、Angular、React.js和React.js&
Redux等。所有这些模板也可以通过命令行使用,不必依赖于Visual Studio
2017。

在明确声明的情况下,Razor语言引擎提供对C#
7.1特性的支持。为此,需在项目文件中需添加该如下属性:<LangVersion>latest</LangVersion>。更改将在重新加载解决方案后生效。

规划将应用部署到Azure的开发人员将会看到,ASP.NET Core
2构建的应用不需作任何更改,就可使用Azure App
Service。应用的部署可以在VS2017中执行,也可直接在Azure门户上执行。

使用已有ASP.NET Core
1.X软件包的开发人员,要详细了解如何升级应用到ASP.NET Core
2.0,可以参考Microsoft的升级指南。使用ASP.NET 2.0需下载.NET Core 2
SDK,它是独立于VS2017提供的。

In short, this is a major release for .NET and a minor one for Visual
Studio. ASP.NET Core 2.0 brings new ways to write your applications and
simplify some of the operational process of managing a production
application; .NET Core 2.0 is the fastest version yet with support
across Windows, Mac, and Linux; while the Visual Studio updates support
both with a bunch of improvements on top.

一、 dotnet core 和 .net的区别

目前在使用C#开发应用程序的时候,有两种框架可供选择: .Net Framework 和
.Net
Core,那他们有什么不同的地方呢?或者说是微软为什么要做两个框架,在同一个平台上运行不好吗?就先让我们一起看看他们之间的不同。

大家都知道 .Net
Core是跨平台的,除了运行在windows上之外,还可以运行在Linux和Mac OS上。而
.Net
Framework只能运行在windows上或者借助于Mono运行于其他平台上。
.Net Core和 .Net Framework可以理解为一个子集和父集的关系,之所以 .Net
Core带了个Core是因为它包含了 .Net
Framework的一些核心的功能和特性,比如它们共享GC (Garbage
Collection,垃圾收集,垃圾回收),jit(Just-In-Time
)编译器,还有类型系统和语言特性等。

  • 那么 asp.net 和 asp.net core 的区别呢?

    asp.net 目前的版本是asp.net
    4.6,它已经被使用了很多年了,它比较稳定,如果你的系统不需要跨平台,只是在windows上运行的话,可以使用asp.net
    4.6, 它很稳定并且很多第三方库都对其进行了支持。

    asp.net core 是采用了 .net
    core的新一代asp.net架构程序。目前的版本是RC2。后面会对其进行大量介绍。

下面这张图就是他们之间的关系:
澳门新葡亰平台官网 2


二、 github中dotnet core各个项目的状况

有一点值得我们开发者高兴的是,现在微软 .net
相关的大多数项目都是开源的,托管在github上,我建议大家有不懂的地方多去查看源代码,来了解其中的运行原理,以便于对知识的更好的理解和吸收。

  • .NET Compiler Platform
    (“Roslyn”)
    .NET编译器。提供的开源Csharp和Visual Basic编译器及代码解析API

  • .NET Core Framework
    也被叫做CoreFx,提供Core的基础程序集类库,它包括collections, file
    systems, console, XML, async等.

  • .NET Core Runtime
    也被叫做CoreCLR,它包括了 .net
    core的runtime(运行时),和mscorlib(基础库),它包含的有GC(垃圾回收),JIT(just-in-time)编译器,
    类型系统(.NET data types),和其他一些底层的类库。

  • ASP.NET Core
    它包含以下Project:

    1. DependencyInjection –
      基础的依赖注入项目和默认的实现
    2. EntityFramework –
      ORM 数据库访问组件
    3. Identity –
      用户身份验证系统
    4. MVC – Web项目的MVC框架
    5. Razor –
      MVC的模板语言和CSHTML文件语法解析
    6. Templates – Visual
      Studio新建项目的默认模板
    7. Tooling – Visual Studio
      工具集, 编辑器 等

本文地址:
作者博客:Savorboard
欢迎转载,请保留出处

简单讲讲:

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最开始的愿景在细节上有些偏差。但是我认为未来本来就不会用生态和语言来划分程序员……

作者:Ivony
链接:
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图