Linux / C ++程序员到C#/ Windows程序员

时间:2008-09-25 05:21:14

标签: c# c++ windows linux

我已经在Linux上使用C ++专门编写了一段时间。在我目前的工作中,它是一个以C#为主要语言的Windows商店。我已经重新训练自己使用Visual Studio而不是emacs(主要原因是VC中的集成调试器,VC中的emacs模式帮助),设置Cygwin(因为我不能没有shell)并且拾取托管语言的绳索。您认为我应该检查哪些工具,书籍,网站(除了MSDN)或陷阱,以使自己成为更高效的Windows / C#编码器?

7 个答案:

答案 0 :(得分:15)

从C ++切换到C#时要考虑的第一件事是大多数情况下共享一些表面语法,但是当您深入研究.Net时,编程范式的差异会变得越来越大。

在开始编程之前了解C#核心编程范例,否则你可能会陷入用C#编写C ++程序的陷阱,这不是长期最好的想法。    最习惯的最重要的事情是:

  • 自动内存管理和垃圾收集,包括配置模式。了解基础知识和陷阱。
  • .Net中的类,接口,结构和原语是什么,以及它们与C ++相比的行为方式。
  • 来自C ++的事件,委托,属性,lambda表达式都是一些新概念。
  • .Net泛型和模板之间的差异。
  • .Net中的字符串,数组,自定义属性,反射,异常和线程基础知识,所有这些都在.Net中大量使用,你必须学习它们的复杂性才能有效地使用它们。
  • Winforms和ASP.Net中的GUI编程(可能在WPF之后),组件,控制器,数据绑定。 .Net GUI模型。

首先从一本通用的.Net书开始,向您介绍所有这些概念。我首先推荐一本关于阅读教程和文章的书,这样你就可以在最后得到一个完整的.Net 图片。互联网上的文章可能无法实现这一点。 我读过的最好的通用.Net书:

Simon Robinson,Christian Nagel,Karli Watson,Jay Glynn,Morgan Skinner,Bill Evjen

Professional C#, 3rd edition.

Professional C#, 3rd edition, ISBN: 978-0-7645-5759-0

第二,既然你是来自C ++背景,那么你习惯于接近金属并且思考方式与硬件的工作方式(原始内存管理(指针,内存分配等)接近)我可以只推荐一本书,它将真正揭开神秘面纱 .Net是什么以及它的作用:

Jeffrey Richter的

CLR Via C#

CLR via C#, Second Edition ISBN 9780735621633

我不能强调这本书对于每个.Net开发人员来说都是如何,尤其是来自C ++,同时也是我读过的最好的.Net书籍之一。这本书非常乐于阅读并涵盖以下主题:

  • .Net执行模型(从MSIL到本机代码)
  • 内存管理(.net运行时和垃圾收集器如何管理内存,堆布局,内存生成,终结,大对象堆)
  • 设计类型
  • 装配加载,反射,应用程序域
  • 以及更多...

这是我最好的建议我可以在最短的时间内让任何人成为专家C#开发人员。

答案 1 :(得分:4)

由于您已经知道如何使用C ++编程,请查看:

A Programmers Introduction to C# 2.0,Eric Gunnerson和Nick Wienholt

语言参考和一般.net信息之间的平衡。

类似地: Don Box和Chris Sells Essential .NET, Volume I: The Common Language Runtime

非常有趣的“幕后”网络书(但为.net版本1编写,所以可能有点过时了。)

答案 2 :(得分:2)

阅读.Net中的垃圾收集。来自C ++土地的人习惯于明确的内存分配和管理。在C#中,显式内存管理几乎不存在。

您应该检查的另一个主题是C#泛型和C ++模板之间的区别。但是,我没有一个很好的链接。

根据您正在使用的产品,您可能不得不求助于从C#调用Win32 API函数。这是通过P / Invoke完成的,所以你可能也想读一下它。如果你必须真正使用它,http://pinvoke.net是大多数Win32 API的非常有用的C#声明集合。

您可能还想学习至少COM的基础知识,因为C#/。Net应用程序通常选择/需要重用来自第三方供应商的组件,这些组件通常作为COM组件实现。 COM是一个复杂的话题。我最喜欢的书是关于COM和Essential COM by Don Box和专业DCOM by Roger rimes。我会从图书馆借用这些,因为您需要阅读的只是前几章(除非您想深入了解)。

如果要编写客户端应用程序,则必须对Windows,消息和消息队列有基本的了解。您将使用Winforms of WPF / XAML,这两种技术都可以很好地隔离您的详细信息;但是为了能够编写好的代码,你需要知道幕后的内容。我不确定这本书会有什么好处,但MSDN有很多信息。

答案 3 :(得分:2)

当我第一次使用C#时,我的背景主要是C / Unix和Python以及一些java和尘土飞扬的2000年代复古VB6。我对使用Java所做的工作熟悉托管运行时,而.Net API与早期的MS API有一些类似的外观。

我发现Troelsen的Pro C# and the .Net 2.0 Platform是一个非常好的C#/。Net资源。现在有更多的新版本。

答案 4 :(得分:2)

查看petzold的dotnet book zero。这可能有所帮助。

答案 5 :(得分:0)

获取Resharper的副本。它可能是直接编码的单一最佳生产力工具。

答案 6 :(得分:-1)

不应该是CLR的基础吗?并不应该使用哪种.NET语言并不重要?如果我查看.NET文档,我可以决定是否要查看VB.Net,C#或C ++中的内容。所以,如果您了解C ++,为什么不应该使用“托管C ++”?

此致 弗里德里希