当前位置: 首页 > news >正文

从编码层面对比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。

相关阅读

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

  • 对比Java和.NET多线程编程

  • 那些年用过的开源项目(.net/c# stack)

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


http://www.taodudu.cc/news/show-911424.html

相关文章:

  • Windows Server 2022 环境下WEB和DNS服务器配置方法
  • Java 枚举的使用与反射应用
  • caj文件是什么?caj是什么文件?考研学生赶紧收藏!
  • word转pdf的java实现(documents4j)
  • java 自定义注解Annotation——入门篇
  • Python3 笔记:查看数据类型、数据类型转换
  • 红帽借“订阅”模式成开源一哥,首创者升任总裁
  • C#两大知名Redis客户端连接哨兵集群的姿势
  • dotNET Core 3.X 请求处理管道和中间件的理解
  • 了解.NET中的垃圾回收
  • 数字化演化历史
  • 如何查找,修复和避免C#.NET中内存泄漏的8个最佳实践
  • ASP.NET Core技术研究-探秘依赖注入框架
  • 从项目到产品: 软件时代需要价值流架构师 | IDCF
  • 推荐一个集录屏、截图、音频于一体的软件给大家
  • WebAssembly增加Go语言绑定
  • .NET中的内存管理
  • .Net微服务实战之技术架构分层篇
  • .NET 下基于动态代理的 AOP 框架实现揭秘
  • Blazor WebAssembly 3.2.0 Preview 4 如期发布
  • C#/.Net Core/WPF框架初建(国际化、主题色)
  • ASP.NET Core 日志框架:Serilog
  • 树莓派销量突然猛增
  • C#黔驴技巧之实现统计结果排名
  • Istio Pilot架构解析
  • 当模板方法遇到了委托函数,你的代码又可以精简了
  • 为什么要用内插字符串代替string.format
  • iPhone上运行Linux也要来了
  • 谁说.NET不适合搞大数据、机器学习和人工智能
  • .NET Core技术研究-主机
  • 多角度让你彻底明白yield语法糖的用法和原理及在C#函数式编程中的作用
  • 哪种开源许可证最适合商业化?
  • 还不会docker+k8s?2020年,就要面对现实了...
  • 3分钟掌握Quartz.net分布式定时任务的姿势
  • ASP.NET Core 配置源:实时生效
  • Linq下有一个非常实用的SelectMany方法,很多人却不会用