前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Java转向.NET/C#,Are You OK?

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

作者头像
Bruce Li
发布2019-11-04 11:12:42
8330
发布2019-11-04 11:12:42
举报

最近由于项目变动,需要用.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/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 天马行空布鲁斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档