从编码层面对比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.mzph.cn/news/310542.shtml

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

相关文章

[剑指offer]面试题28:字符串的排列

面试题28:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 思路: 这是一个典型的递归问题,考虑…

红帽借“订阅”模式成开源一哥,首创者升任总裁

4 月 6 日,红帽公司宣布,产品和技术总裁 Paul Cormier 即日起任红帽总裁,并兼任首席执行官。Paul Cormier 是开源商业化“订阅”模式的提出者,这一模式促使红帽达成连续超70个季度的盈利,身价升至340亿美金&#xff0c…

Docker中数据管理

Docker数据管理 生产环境中,对数据进行持久化,或者需要在多个容器直接进行数据共享,这必然涉及到容器的一些数据管理的操作。容器中数据管理主要有两种方式: 数据卷(Data Volumes):容器内数据直…

[剑指offer]面试题31:连续子数组的最大和

面试题31:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 ❖ 解法一:举例分析数组的规…

C#两大知名Redis客户端连接哨兵集群的姿势

前言前面《Docker-Compose搭建Redis高可用哨兵集群》,我的思路是将Redis、Sentinel、Redis Client App链接到同一个网桥网络,这个网桥内的Redis Client App就可以使用ContainerIP访问网桥内任意redis节点。同一网桥网络访问规避了Docker上发生的NAT&…

Docker之Dockerfile详解

使用Dockerfile创建镜像 Dockerfile是一个文本格式的配置文件,我们可以利用Dockerfile来快速的创建一个自定义的镜像。 基本结构 Dockerfile由一行命令语句组成,并且支持以#开头的注释一般包括四个部分:基础镜像信息,维护者信息…

[剑指offer]面试题34:丑数

面试题34:丑数 题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。 ❖ 逐个判断每…

创业的N种死法

点击蓝字关注,回复“职场进阶”获取职场进阶精品资料一份互联网的江湖一直流传着大佬们的创业传奇。马云上厕所几分钟敲定几千万美金融资。王石走投无路靠倒卖玉米赚到上百万从此逆袭。扎克伯格为了获得哈佛美女照片,开发一个小玩意从此改变了世界。传奇…

Docker容器实战思维

Docker成功的基础 Docker的实现用到的基础技术(cgroups, namespace,分层文件系统)在Docker之前已经存在很多年,并且 Linux Containers(LXC)也在很多企业的环境中得到了大量的应用实践,并得到明…

[剑指offer]面试题35:第一个只出现一次的字符

面试题35:第一个只出现一次的字符 题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出’b’。 代码如下: char FirstNotRepeatingChar(char *pString) {if (pString nullptr) return \0;const int tableSize…

dotNET Core 3.X 请求处理管道和中间件的理解

理解 dotNET Core 中的管道模型,对我们学习 dotNET Core 有很大的好处,能让我们知其然,也知其所以然,这样在使用第三方组件或者自己写一些扩展时,可以避免入坑,或者说避免同样的问题多次入坑。本文分为以下…

数据结构与算法--实现Singleton模式

题目:设计一个类,我们只生成该类的一个实例。 只生成一个实例的类就是实现Singleton(单例)模式的类型。本题其实主要考察我们设计模式,因为面试的时候先来一个简单的,并且喜欢面设计模式相关的题目&#x…

[剑指offer]面试题37:两个链表的第一个公共结点

面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下: struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {} };思路: 两个链表长度分别为L1C、L2C&…

了解.NET中的垃圾回收

原文来自互联网,由长沙DotNET技术社区编译。尽管这是一篇来自2009年的古老的文章,但或许能够对你理解GC产生一些作用。 了解.NET中的垃圾回收一旦了解了.NET的垃圾收集器是如何工作的,那么可能会触及.NET应用程序的一些更为神秘的问题时&…

数据结构与算法--数组:二维数组中查找

数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存。即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存&#xf…

[剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列

面试题41:和为s的两个数字VS和为s的连续正数序列 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。 代码如下: bool FindNumbersWit…

数字化演化历史

回顾历史,帮助我们展望未来,在数字化技术出现之前,人类历史几千年的历史中,人类社会中,人类的大脑是唯一可以作信息处理的。比如我们发明了汽车,需要人来开车;发明了飞机,需要人来驾…

数据结构与算法--字符串:字符串替换

数据结构与算法–字符串:字符串替换 字符串的优化 由于字符串在编程时候使用的评率非常高,为了优化,很多语言都对字符串做了特殊的规定。下面我们讨论java中字符串的特性java中的字符数组以’\0’ 结尾,我们可以利用这个特性来找…

[剑指offer]面试题42:翻转单词顺序 VS左旋转字符串

面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输…

数据结构与算法--经典10大排序算法(动图演示)【建议收藏】

十大经典排序算法总结(动图演示) 算法分类 十大常见排序算法可分为两大类: 比较排序算法:通过比较来决定元素的位置,由于时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序非比较类型排序&…