我如何从Java转向C#?

37

我很熟悉Java。哪些注意事项和资源可以帮助我尽可能轻松地过渡到另一边(C#)。


1
此外,这并不是针对这个问题的答案,但建议阅读Jeffrey Richter的CLR Via C#,并通读全书。我们使用的是框架的3.5(sp1)版本,但CLR仍然是2.0版本。这本书将为您提供构建其他所有内容所需的基础。 - user1228
我发现从C#转换到Java或者从Java转换到C#都非常容易。它们有许多相似之处,你在Java中学习的大部分编程范例都可以延续。 - mmcdole
9个回答

35

最重要的提示:从一开始就遵循.NET命名约定。这样你就会不断地想起你所处的语言是哪一个。尽可能接纳该语言的习惯用法。

有一些专门针对你这种情况的书籍——在亚马逊上搜索"C# for Java",你会得到大量搜素结果。值得仔细阅读,以确保你不会认为C#和Java的行为方式是相同的(例如,在C#中,实例变量初始化器在基类构造函数体之前执行;而在Java中则是在之后执行。这些微妙的东西可能需要一段时间才能学会,并且如果你只是匆匆浏览的话,很容易错过)。

如果你将使用 C# 3,请获取一本明确覆盖这方面内容的书籍 - 关于 C# 3 的所有内容都将对你来说是新的。自我宣传一下:我的书(C# in Depth)涵盖了 C# 2 和 3,但假定你已经掌握了 C# 1。(换句话说,它本身并不足够,但你可能需要它作为“第二本”书籍。)


《C#深入探索》是一本非常不错的读物,这是根据一个非作者(也就是我自己)的评价得出的。尽管我必须承认,我觉得封面设计有点丑。 - Greg D
8
如果有我的照片就会更难看了 :) - Jon Skeet

14

看看这篇关于C#与Java的比较的好文章。它提供了一些有关如何在两个语言中避免最小开销的见解。用你已经掌握的语言和想学习的语言进行示例可以使学习曲线变得更容易。


3
  1. 安装Visual Studio 2008和带有IntelliJ IDEA键绑定的Resharper。这将为您提供诸如在开始使用命名空间时提示您包含命名空间等功能。
  2. 开始一个新项目并开始编写Java代码,当您遇到某些无法正常工作或无法找到要使用的类的情况时,请在Google中搜索“PrintLn in c#”。
  3. 编写测试或代码片段进行健全性检查,例如,您可能想检查==是否适用于字符串(是)
  4. 意识到c#别名数据类型(int是System.Int32的别名,string是System.String的别名)
  5. 查看其他人的代码,我推荐JP Boodhoos Google code
  6. 接受C#的工作,有很多工作需要Java和C#,特别是在支持方面。
  7. 了解您的库,大多数Java库已被移植,大多数情况下名称类似于(Hibernate => NHibernate)或(Xstream => Xstream.Net)。并非每个库都有明显的名称,因此只需开始查看您在此处听到的随机库即可。即(Rhino.Mocks、HTMLAgilityPack、MBUnit、Rhino.Commons、Castle Project)
  8. 参加用户组会议,寻找DNUG(Dot Net User Group),他们会很有帮助,您可以得到一些好建议。

2

这里有一份微软提供的C#作弊表,专门为Java开发者准备的 :)

原始答案

1

我知道已经有一个好的答案被接受了。然而,我想做一个补充...

我发现学习一门新语言通常涉及到学习微妙的语法差异...特别是在处理C/C++/Java/C#系列语言之间的差异时。

除了一本不错的参考书外,我建议再购买一个口袋参考书,比如O'Reilly出版社的C# 3 Pocket Reference。它可能无法帮助你理解设计模式等内容,但可以提供关于你正在使用的语言的非常快速的参考信息。

以下是该网站对这本书的简短介绍:

《C# 3.0口袋参考》包括丰富的插图和代码示例,用于解释以下内容:
  • C# 3.0新增功能,例如Lambda表达式、匿名类型、自动属性等
  • C# 语法、预定义类型、表达式和运算符的所有方面
  • 创建类、结构、委托和事件、枚举、泛型和约束、异常处理和迭代器
  • 装箱的微妙之处、操作重载、委托协变、扩展方法解析、接口重新实现、可空类型和操作提升
  • LINQ,从序列原理、延迟执行和标准查询运算符开始,一直到完整的查询语法参考-包括多个生成器、连接、分组和查询继续
  • 使用、编写和反射自定义属性

我曾使用此书(原版)帮助我从Java开发人员转向C#。在学习期间,我始终将它放在我的桌子旁边,真的很有帮助。


1

我在工作中使用C#,很容易地进行了转换。但是,其中最重要的一件事情是熟悉.NET API以及C#中可用的一些强大技术。

在我学习了.net库之后,我更多地依赖它,因此了解它所能为您做的事情非常有帮助。之后,如果您需要与数据库代码一起工作,请学习LINQ,并且掌握lambas、匿名类型和委托等技巧也很有用。


0
语言语法非常相似,因此我只需要阅读C#语法的小参考资料。 像一本简单的书(面向有经验的程序员)或者维基百科(http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp)就足够了。
最大的区别在于库:Asp.Net网站与Java Servlet完全不同。
不要多读,开始编程吧!

1
不要使用老旧的ASP.NET Web Forms模型,改用ASP.NET MVC。这是一个更好的框架。 - user1228
这些语言曾经非常相似,特别是Java 1.4和C# 1。但现在它们已经非常不同了,即使它们看起来很相似(例如泛型),它们也可能有天壤之别。 - Jon Skeet
认为这两种语言相似是让自己陷入痛苦境地的好方法...这很容易导致忽视微妙的差异,比如如何重新抛出异常。 - James Schek

0

0

使用Sharpen将你的Java程序转换为C#并查看差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接