从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,一经查实,立即删除!

相关文章

如何看待潘石屹搞python_潘石屹考了99分的Python,到底是一种什么存在?

去年,当地产大佬潘石屹要把学习Python作为生日礼物送给自己的时候,微博上还多是一阵调侃之声。可能正是印证了Python程序员们常常挂在嘴边的“人生苦短,就学Python”的口头禅,时年56岁的小潘同学要再一次抓住“青春”的尾巴吧。为…

python机器学习、数据分析常用第三方库(实时更新)

常用镜像源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里:http://mirrors.aliyun.com/pypi/simple/ 豆瓣:http://pypi.douban.com/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学&#xff…

树的节点值之和

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

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

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

angularjsl路由_AngularJs ng-route路由详解

本篇基于ng-route来讲下angular中的路由,路由功能主要是 $routeProvider服务 与 ng-view 实现。ng-view的实现原理,是根据路由的切换,动态编译html模板——$compile(html)(scope)。前提首先需要在页面引入angular和angular-route,…

pandas中Series的map函数详解

Series的map函数 Series的map方法可以接受一个函数或含有映射关系的字典型对象。使用map是一种实现元素级转换以及其他数据清理工作的便捷方式。DataFrame中对应的是applymap()函数,当然DataFrame还有apply()函数 1.字典映射 例如,对数据的某个字段进…

简单的二叉树创建与遍历

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

tof摄像头手势识别_一种基于TOF手势识别的控制系统的制作方法

本发明属于汽车零配件技术领域,尤其是一种基于TOF手势识别的控制系统。背景技术:随着触摸屏技术的不断推广,用户已经适应并逐渐熟悉了与机器的互动。现在,人机互动技术已迈上了更高的台阶,进入了手势识别时代。随着手势…

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

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

Pandas - 查看DataFrame信息

数据表信息查看 1、维度查看: df.shape2、数据表基本信息(维度、列名称、数据格式、所占空间等): df.info()3、每一列数据的格式: df.dtypes4、某一列格式: df[B].dtype5、空值: df.isnul…

hdu2602 Bone Collector-01背包问题

Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone collector had a big bag with a volume of…

对比Java和.NET多线程编程

这篇文章以对比的方式总结Java和.NET多线程编程。基本概念多线程:很多开发语言都提供多线程编程支持,比如Java,C#。并发(concurrent):即使对于单核CPU,我们也会采用多线程等技术提高service的并…

Anaconda创建python虚拟环境

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

vue2实践揭秘pdf_《Vue2.0 实践揭秘》终于出版啦!

不知不觉间在园子开博都两年多了,最近一些园友问最近去哪了为何都没有新的文章了。最近确实发生了很多的事,一是忙工作二就是忙着写书。这还得多些园子的小编,自两年前发表的“架构师修炼”系列的文章后被出版社相出让我将这个主题写成书&…

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

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

这些年我对微服务的理解

Monolith、SOA、DDD、The two-pizza rule、分库分表这些概念跟微服务有啥关系,你知道吗?这篇文章记录我的理解,分享给大家。微服务(micro service),个人感觉也就近几年才吵起来的概念,记得退回去…

梯度下降与线性回归

对于代价函数: 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&…

fastreport字体自适应_FastReport 自动换行与行高自适应及自动增加空行

设定后即可自动换行及行高自适应。版本号5.6.21、masterData:属性值:stretched 为True2、Memo设定wordwrap为True ,stretchMode:smMaxHeightFastReport自动增加空行1、在masterdata下增加child;2、在code编写如下代码varPageLine: integer;//…

.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版本并且下载安装 …