c#学习和java的比较

最近公司的后台使用c#作为开发语言,我也就把自己的方向有C#转到了java来了,使用了一段时间的c#开发,在这里做一点总结一下自己关于c#和java的认识

1.相同之处

  • 面向对象语言

            作为高级语言,c#和java都具有面向对象的特性,不过由于历史问题,java的面向对象做得不是很彻底,也就有了Integer、Double之类的坑爹东西了。而c#好像到6.0还是保留着值类型、并不是想像js等脚步语言一样彻底的面向对象。

  • 命名空间(C#)或包(java)之类的机制做访问控制

               c#命名空间说白了就是隔离程序,使不同命名空间的程序可以取相同的名称,通过命名空间限定,就能够对具有相同名称的程序做到分辩。但是c#和java不同的是,c#有个程序集的概念,将一个项目的所有资源看作了一个统一的单元,这个是与.NET本身的机制有关的,目前还不是很了解。而java的包机制功能和命名空间都是差不多的,java的包通常按照:组织.项目.模块.xxx的机制命名。

  • 泛型编程

范型编程接触得比较少,不过他的功能很强大,写好了,能够省略大量的代码。不过我不是很了解,就不做描述。

  • 特性(C#)和注解(java)之类的元语言支持

java和c#的这个特性我就知道与反射机制有关。

  • 反射机制

java动态的获取对象属性和调用对象方法,加在程序编译时完全未知的类,甚至可以运行时生成程序。

  • lambda表达式(java支持比较慢)


    函数表达式,我知道的一个好处就是让代码更优雅,更简洁。不过java支持得比较慢,到了java8才有这个特性。
  • 2.不同之处
  • c#语法糖

有许多便利的操作,比如??代替三目运算符,int?之类的可空值类型,?.之类的

  • linq对象操作

对数组和集合操作非常方便,可惜java没有

  • c#的属性字段

可以用get和set关键字定义属性的get和set方法,不过我很好奇,字段已经是public了,可以直接访问,这个属性有什么意义。我猜的是可能是可以通过关键get和set定义访问规则,有可以直接通过字段名访问,不像java要通过getter和setter方法来做,要方便许多吧。

  • 委托

委托可以将一个函数作为参数传递给方法调用,适合做回调,不够接口好像也可以干这种事情啊,还是我太年轻了。

  • 命名规范

都是驼峰命名,不过c#的方法和属性第一个字母是大写,有点不习惯。


  • 对加锁的处理方式不同

java是通过synchronize来自动加锁,自动释放锁。而c#有lock和unlock手动加锁和解锁。

  • java默认支持多态

c#好像要通过virtual和override来声明。

  • java更开源

java从一出生便拥抱开源,在开源社区混得风生水起的,有许多的大牛为java贡献了非常多的优秀代码,所以java的开源资源非常丰富。不过最近,.net已经全面开源了,.net asp的跨平台开源实现已经放出来了,相信再过不久,也会有许多的开发者不断的涌入.net正营。

  • java的第三方库更丰富

当然,java是开源的,确实有像apache这样的组织为java贡献代码。

      差不多就这些了,还有一些比如c#保留不安全代码,com对象的调用之类的不了解就不说了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值