从Java转向.NET/C#,Are You OK?

最近由于项目变动,需要用.NET/C#做开发,经过一段时间的学习和培训,对这个技术栈有了一定的理解。大家可能都知道Java和.NET/C#很像,这里粗略的把两者做一个对比,希望对感兴趣的童鞋有所帮助。

如果现在有人问我:.NET/C#怎么样啊?我的回答会是:用.NET/C#做开发,上手确实快,很适合小项目开发;但是生态远不如Java,所以这也是它流行度不如Java的原因。(TIOBE Index for October 2019)

首先,解释一下.NET Framework和.NET Core的区别:.NET Framework是老一代的.NET平台,只能运行在Windows机器上,所以严格来讲,.NET Framework并不是完全的跨平台;.NET Core是新一代的.NET平台,2016年才推出,能够实现真正的跨平台,可以运行在Windows、Linux、Mac OS等机器上,这就和Java一致了。微软的计划是在.NET 5统一这两个平台,意思之后只会有一个统一的平台,就叫.NET。

关于.NET体系中各个平台的关系,可以参考下图(https://devblogs.microsoft.com/cesardelatorre/net-core-1-0-net-framework-xamarin-the-whatand-when-to-use-it/):

上图除了.NET Framework和.NET Core之外,还提到一个Xamarin,它是专门用于开发移动端应用的平台。这又让我联想到了Java,起初Java也分成了三个平台:J2ME、J2SE、J2EE,感觉Xamarin有点对标J2ME,主要focus在移动端开发,.NET Core对标J2SE,而ASP.NET Core就是对标J2EE。

Java和.NET的比较

下面是我整理的Java和.NET的比较列表,可以看到它们确实很像,基本上很多概念都可以对应起来。

之前在微软官网浏览介绍ASP.NET的页面时,看到.NET的性能比Java Servlet高出很多,居然高出两倍还多,让我很是惊讶。(具体参考https://dotnet.microsoft.com/learn/aspnet/what-is-aspnet-core)

另外,关于.NET Framework版本的进化历史,可以从下图粗略了解到:

出处:https://www.geeksforgeeks.org/c-sharp-net-framework-basic-architecture-component-stack/

Java和C#语法比较

C#的语法由ECMA334定义(https://www.ecma-international.org/publications/standards/Ecma-334.htm),而Java的语法是由Java Languge Specification定义(https://docs.oracle.com/javase/specs/)。

一点题外话,关于ECMA,我们耳熟能详的可能就是ECMAScript,即是javascript的超集,ECMAScript是由ECMA262定义。ECMA其实是一个标准组织,我们听得比较多的另一个标准组织就是ISO(国际标准组织),记得之前做过一个task,就用到了ISO关于日期格式定义的一个标准ISO 8601。在我之前关于编码的一篇文章(关于编码的那些事),也有提到一些关于编码的ISO标准,比如ISO-8859-1。

关于Java和C#两个语言语法的比较,这里推荐一个网址(http://www.javacamp.org/javavscsharp/),里面有非常详细的对比:

除上面列出的之外,我想再额外补充下面一点:

  1. Extension methods(扩展方法):扩展方法是C#的概念,主要是用在一个类提供的标准方法满足不了需求的时候,可以扩展 这个类,提供一些额外的方法以实现自定义的功能;Java里面没有这样的概念,如果要实现这样的需求,只能通过继承或者组合来实现。这里提到继承,在Java里,继承的关键字是extend,而extend的关键字就是扩展的意思,这可能就是Java语言设计者的本意吧,通过继承来实现一些扩展的功能。其实extension这是一个很大的话题,不光在语言本身层面需要考虑,在应用层面,其实也常常需要考虑,比如说字段的扩展、流程的扩展等。这里的扩展方法,则可能更多的像是一种流程的扩展。

References

  • http://www.javacamp.org/javavscsharp/

  • .NET/C#在性能测试中表现很不错:https://www.osnews.com/story/5602/nine-language-performance-round-up-benchmarking-math-file-io/

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

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

相关文章

树的节点值之和

题目背景 墨家家主有棵树。 题目描述 给定一个保存树节点信息的数据结构,它包含了树节点唯一的 id ,树节点值 和 直系子节点的 id 。 比如,树节点1是树节点2的父节点,树节点2是树节点3的父节点。他们相应的树节点值为 9 , 4 , …

.NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(上)...

21 | 中间件:掌控请求处理过程的关键这一节讲解一下如何通过中间件来管理请求处理过程中间件工作原理next 表示后面有一个委托,每一层每一层套下去可以在任意的中间件来决定在后面的中间件之前执行什么,或者说在所有中间件执行完之后执行什么…

简单的二叉树创建与遍历

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后&…

疫情期间,千万级系统宕机N次,老板撂下狠话:没法把性提升10倍,全员解雇!...

性能调优整体思路作为一名团队技术核心,如何让系统跑得通、跑得稳、跑得快是必然会面对的场景。性能分析是一个大课题,不同的架构、不同的应用场景、不同的程序语言分析的方法若有差异,抽象一下大致分为两类:自底向上:…

Anaconda创建python虚拟环境

在创建虚拟环境之前首先我们需要打开命令终端:Win R 输入cmd 或者直接打开Anaconda Prompt(Anaconda) pycharm下载历史版本地址:https://www.jetbrains.com/pycharm/download/other.html Anaconda下载历史版本地址:ht…

[蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索

题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ”夺宝奇兵”从山下出发,到达山顶,如何选路才能得到最多的珠宝呢?在上图所示例子中,按照5-> 7-> 8-&g…

梯度下降与线性回归

对于代价函数: loss∑i(y^−yi)2loss\sum_i{(\hat{y}-y_i)}^2loss∑i​(y^​−yi​)2 loss∑i(w∗xib−yi)2loss\sum_i{(w*x_ib-y_i)}^2loss∑i​(w∗xi​b−yi​)2 最常见的代价函数:均方差代价函数(Mean-Square Error,MSE&…

.NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)...

21 | 中间件:掌控请求处理过程的关键如果在 Map 的时候逻辑复杂一点,不仅仅判断它的 URL 地址,而且要做特殊的判断的话,可以这么做把判断逻辑变成一个委托我们要判断当我们的请求地址包含 abc 的时候,输出 new abcapp.…

英伟达3060Ti安装GPU版本TensorFlow2.X和Pytorch

查看Python与TensorFlow对应版本 安装GPU版本的TensorFlow的时候,我们需要考虑的一个问题是Python版本与TensorFlow版本的对应关系,可以参考下面这个链接: Python对应TensorFlow CPU版本 GPU版本 查看显卡驱动对应的CUDA版本并且下载安装 …

200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]

2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架&…

逻辑回归(二)

逻辑回归 在学习逻辑回归之前我们先回顾一下线性回归。线性回归解决的是回归问题,简单来说就是,我们需要找到一个函数,这个函数需要尽可能的拟合所有训练集的样本点。 逻辑回归解决的是分类问题,它的目标是找到一个函数&#x…

上元节的灯会(灭)-区间dp

题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯。不过点亮的是花灯阵,熄灭的…

Asp.Net Core 中IdentityServer4 授权中心之应用实战

一、前言查阅了大多数相关资料,搜索到的IdentityServer4 的应用文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应用分析中会以一个电商系统架构升级过程中普遍会遇到的场景进行实战性讲述分析,…

交通标志识别项目教程

项目结构图 下载好项目压缩包后解压,得到以上的文件,首先将画红圈的文件删除(如果有) 安装软件 安装Anaconda 安装Pycharm 安装格式工厂 在上图中这个位置输入cmd回车,即可打开命令终端。用这样的方式打开命令终端…

C# 视频监控系统

去过工厂或者仓库的都知道,在工厂或仓库里面,会有很多不同的流水线,大部分的工厂或仓库,都会在不同流水线的不同工位旁边安装一台电脑,一方面便于工位上的师傅把产品的重要信息录入系统,便于公司系统数据采…

sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

机器学习xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM)。支持向量机也是监督学习里面一个非常容易理…

程序员过关斩将--从每秒6000写请求谈起

点击上方“蓝字”关注我们菜菜哥,紧急求助呀怎么回事?产品经理砍你了?没有,只是写了个新项目,上线就被压垮了什么功能,这么强悍?一个记录用户观看视频进度信息的功能那如果用户基数大&#xff0…

批量将PPM格式图片转化为JPG格式

将PPM格式图片转化为JPG格式 做图像识别的时候数据集常常是ppm格式的,虽然不影响建模训练,但是我们电脑往往不支持ppm格式的图像展示。 比如到做交通标志识别的时候用到的BelgiumTS交通数据集或者德国GTSRB数据集 下载后得到都是ppm格式的图像。 格式转…

Magicodes.IE 2.2里程碑需求和建议征集

简介Magicodes.IE是导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf、Csv和Html。已加入NCC开源组织。Magicodes.IE 2.0发布Github:https://github.com/dotnetcore/Magicodes.IE码云(手动同步,不维护…

交通标志识别教程(二)

项目结构图 下载好项目压缩包后解压,得到以上的文件,首先将画红圈的文件删除(如果有) 安装软件 解压软件包 安装Anaconda 直接下一步,到了这个页面全部勾选,否则不会添加添加环境变量。 安装Pycharm …