专栏首页天马行空布鲁斯从编码层面对比java和c#

从编码层面对比java和c#

java和c#都是面向对象编程高级语言,总体上来讲,它们还是很相似的,因为它们在发展过程中都很大程序上学习了对方不少优秀的特性。所以,一般来说,从其中一门语言转换到另外一门语言应该都不会有很大问题。

虽然说这两门语言很相似,但还是有一些不同点,如果我们能够掌握这些不同点,则可以更加容易的实现两门语言之间的切换,编写出更加专业的代码。

之前写过一篇文章(从Java转向.NET/C#,Are You OK?),从highlevel层面对比了java和.net/c#两个技术栈,通过这篇想必大家对.net/c#技术栈会有一个比较全面直观的认识。接下来从编码角度对这两门语言进行一个对比,这些也应该是一个Java程序员转为c#程序员刚开始最需要适应和理解的点:

编码风格

  1. c#里面方法命名建议大写打头,follow pascal case;而java里面方法名是小写打头,follow camel case。
  2. c#里面常量命名follow pascal case;而java里面常量命名单词全大写,单词之间用下划线连接。
  3. c#里面左右大括号都独立成一行;java里面左大括号不独立成一行。

语法层面

  1. java里面有pacakge的概念;c#里面对应的是namespace。
  2. java里面引入某一个package下面的类,用import;c#里面对应的是using。
  3. java里面继承父类和实现接口分别是extend和implement;c#里面都用冒号(:)。
  4. java里面调用父类方法用super;c#里面对应是base。
  5. java里面定义一个immutable类用final;c#里面对应是sealed。
  6. java里面防止方法被重写用final;c#里面对应是sealed,在多重继承复写方法的场景可能会用到。
  7. java里面public或protected方法默认都是可以被重写;c#里面默认都是不可被重写,如果要可被重写,需要加virtual标明。
  8. java里面子类复写方法用@Override标注;c#里面则是用override关键字。
  9. java里面定义常量用final static;c#里面对应是const。更加准确的说,java里面的final对应c#里面的readonly,java里面的final static对应c#里面的const。
  10. java里面有checked exception和non-checked exception(RuntimeException)之分;c#里面只有non-checked exception。
  11. java里面的annotation概念;c#里面对应的是attribute。
  12. java里面可变参数是...;c#里面对应是params。
  13. java里面一个java文件只能包含一个public class,并且文件名要和类名相同;c#则没有这个限制,可以包含多个public class。
  14. c#里面有property(属性)概念;java里面没有,但可用getter/setter方法替代。
  15. c#里面有delegate(委托)概念;java里面没有。委托,代表一个方法的引用,是c#一开始就有的概念,和后来新增的lambda概念类似,都是对函数式编程(一个显著特征就是:函数可以作为参数传递)的支持。java是到了java 8才支持lambda,在之前如果有传递函数的场景,都是通过匿名类来实现。
  16. c#里面有extension method(扩展方法)概念;java里面没有。扩展方法,正如其名,可以实现对标准方法的扩展。参考我的另外一篇文章(从Java转向.NET/C#,Are You OK?)。
  17. c#里面可以直接用@打头实现一个string的转义。
  18. c#里面可以用int?表示一个可为null的int变量(here int is primitive type);java里面只能用Integer。

References

  • https://blogs.msdn.microsoft.com/mschray/2013/05/06/practical-naming-standards-for-c/
  • https://www.oracle.com/technetwork/articles/javaee/codeconventions-135099.html

本文分享自微信公众号 - 天马行空布鲁斯(gh_2feda5c053bd),作者:huazailmh

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 这些年我对微服务的理解

    Monolith、SOA、DDD、The two-pizza rule、分库分表这些概念跟微服务有啥关系,你知道吗?这篇文章记录我的理解,分享给大家。

    Bruce Li
  • 关于分布式系统数据一致性的那些事

    近些年,随着SOA、微服务架构的流行,分布式系统数据一致性问题也随之而来成为大家热门关注的一个问题。其实,这个问题在很早之前就存在,因为在现实生活中,很多系统都...

    Bruce Li
  • 空谈发件箱模式(outbox pattern)

    基于微服务架构模式(当然不限于)的应用系统,常常会利用消息中间件(kafka,rabbitmq等)来实现各个微服务之间的通信。对于用户的某个操作,一个微服务可能...

    Bruce Li
  • 对于拼车小程序你了解多少?有什么优势?

    1.上下班拼车:很多人的上班路线都是重复或相同的,而每个人都开车的话,这样每个人都会给交通拥堵添一份力,如果多人拼车,那能很大程度缓解开车拥堵,也能给自己上下班...

    用户1745481
  • 对于拼车小程序你了解多少?有什么优势?

    1.上下班拼车:很多人的上班路线都是重复或相同的,而每个人都开车的话,这样每个人都会给交通拥堵添一份力,如果多人拼车,那能很大程度缓解开车拥堵,也能给自己上下班...

    用户1745481
  • UPS如何用大数据优化送货路线

    大数据文摘
  • Centos 7 之 RAID 5 详解及配置

    二、Software,hardware RAID: . 为何磁盘阵列又分为硬件与软件呢? 所谓的硬件磁盘阵列(hardware RAID)是通过磁盘阵列卡来达成...

    小手冰凉
  • 35.Django2.0文档

    第四章 模板  1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系...

    zhang_derek
  • dplyr包summarize的使用

    cyl有4,6,8三种取值,而gear有3,4,5三种取值,应该一共有9组,但我们这里只有8组,原因是cyl=8,gear=4的没有,默认不填补缺失值就会被 d...

    爱学习的小明明
  • Struts之标签库

    爱撒谎的男孩

扫码关注云+社区

领取腾讯云代金券