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对象的调用之类的不了解就不说了。

C#Java 都是面向对象的、广泛使用的编程语言,它们的学习路线有一些相似之处,但也存在一些差异。 **相似之处**: 1. **基本语法**:两者的语法结构都比较类似,都是基于类的编程,支持封装、继承和多态等面向对象的核心特性。 2. **面向对象编程**:都需要理解类、对象、构造函数、方法、属性以及访问修饰符(如public、private等)的概念。 3. **平台无关性**:虽然最初分别针对Windows(C#)和Java平台,但现在都有跨平台版本,例如C#的.NET Core和Java的JVM支持。 4. **标准库和框架**:都有丰富的内置库和第三方框架供开发者使用,如.NET Framework和Java的Spring框架。 **不同点**: 1. **生态环境**:C#更倾向于Microsoft生态体系,而Java则有广泛的开源社区和企业支持,如Android开发。 2. **IDE和工具**:C#通常与Visual Studio或Visual Studio Code搭配,Java则有Eclipse和IntelliJ IDEA这样的主流开发环境。 3. **内存管理**:Java是自动垃圾回收的,不需要程序员手动管理内存;C#也有垃圾回收机制,但在某些场合下需要了解托管和非托管代码的区别。 4. **性能**:C#由于运行在.NET平台上,可能会比纯Java应用稍快,尤其是在C# 6.0引入Value Types后。 5. **C#更现代**:C#在某些新特性和语言设计上更为现代化,比如Lambda表达式、async/await和Nullable Reference Types。 **学习路线**: 1. **基础知识**:开始学习基本的数据类型、控制流程、类和对象、数组、集合等概念。 2. **面向对象编程**:深入理解继承、封装和多态。 3. **特定平台**:如果目标是桌面应用,学习C#的WinForms/WPF或Java的Swing/FX;如果关注Web开发学习ASP.NET Core或Java的Spring Boot。 4. **框架和库**:熟悉常用的框架,如.NET MVC/CQRS或Java的Hibernate/Spring Data。 5. **实践项目**:通过实际项目提升技能,巩固理论知识。 6. **持续更新**:保持对最新版本语言特性和技术趋势的关注。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值