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

时间:2020-03-06 14:42:17  来源:igfitidea点击:

我现在一直在使用C ++的Linux上专门进行编码。在我目前的工作中,这是一家使用Cas主要语言的Windows商店。我已经重新训练自己,以使用Visual Studio代替emacs(主要原因是VC中的集成调试器,VC帮助中的emacs模式),设置Cygwin(因为没有外壳我就无法生存)并接受托管语言。我们认为我应该检查哪些工具,书籍,网站(除了MSDN之外)或者陷阱以使自己成为更高效的Windows / Ccoder?

解决方案

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

由于我们已经知道如何使用C ++进行编程,因此请查看:

埃里克·冈纳森(Eric Gunnerson)和尼克·威恩霍尔特(Nick Wienholt)撰写的C2.0程序员简介

语言参考和一般.net信息之间达到了很好的平衡。

相似地:
基本.NET,第I卷:Don Box和Chris Sells撰写的公共语言运行时

真正有趣的"秘密"网络书(但为.net版本1编写,因此可能有点过时了)。

了解有关.Net中的垃圾收集的信息。来自C ++领域的人们习惯于显式的内存分配和管理。在Cexplicit中,内存管理实际上是不存在的。

我们应该检查的另一个主题是Cgenerics和C ++模板之间的区别。不过,我没有一个很好的链接。

根据我们所使用的产品,我们可能不得不求助于C#调用Win32 API函数。这是通过P / Invoke完成的,因此我们可能还需要阅读一些有关它的信息。而且,如果必须实际使用它,则对于大多数Win32 API,http://pinvoke.net都是非常有用的C声明的集合。

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

如果要编写客户端应用程序,则必须对Windows,消息和消息队列有基本的了解。我们将使用WPF / XAML的Winforms,这两种技术都能很好地隔离详细信息。但是,要想编写出良好的代码,我们需要了解幕后情况。我不确定这将是一本好书,但是MSDN有很多信息。

不应该是CLR的基础吗?使用哪种.NET语言不重要吗?如果查看.NET文档,则可以决定是否要在VB.Net,Cor C ++中看到这些内容。因此,如果我们了解C ++,为什么不应该使用"托管C ++"呢?

问候
弗里德里希

当我第一次使用C#时,我的背景主要是C / Unix和Python,带有一些Java和尘土飞扬的2000年代的VB6. 我从Java和.Net API的工作中熟悉了托管运行时,其外观与早期MS API的外观有些相似。

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

从C ++切换到C时首先要考虑的事实是,大多数情况下都共享一些表面语法,但是随着我们对.Net的深入研究,编程范例的差异变得越来越大。

在开始编程之前,请了解Ccore编程范例,否则我们可能会陷入用C#编写C ++程序的陷阱,从长远来看,这并不是最好的主意。
习惯的最重要的事情是:

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

首先从一本通用的.Net书籍开始,向我们介绍所有这些概念。我建议我们先阅读一本书,再阅读教程和文章,以便最后可以大致了解.Net。互联网上的文章可能无法实现这一目标。
我读过的最好的通用.Net书:

专业C#,第3版。西蒙·罗宾逊(Simon Robinson),克里斯蒂安·内格尔(Christian Nagel),卡利·沃森(Karli Watson),杰伊·格林(Jay Glynn),摩根·史金纳(Morgan Skinner),比尔·埃夫延(Bill Evjen)

其次,由于我们来自C ++的背景,并且习惯于熟悉金属并以接近硬件工作方式的方式思考(原始内存管理(指针,mem分配等),这本书真正揭开了.Net的神秘面纱,它的作用是:

CLR通过Cby Jeffrey Richter

通过C#进行CLR,第二版ISBN 9780735621633 http://www.microsoft.com/MSPress/books/imgt/6522.gif

我不能太强调这本书对每个.Net开发人员有多好的帮助,特别是来自C ++的人,同时又是我读过的最好的.Net书籍之一。这本书是纯粹的阅读乐趣,涵盖了以下方面的主题:

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

这是我最好的建议,我可以给任何人在最短的时间内成为专家级Cdeveloper的方式。

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