【问题标题】:Linux/C++ programmer to C#/Windows programmerLinux/C++ 程序员到 C#/Windows 程序员
【发布时间】:2010-09-12 23:51:52
【问题描述】:

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

【问题讨论】:

    标签: c# c++ windows linux


    【解决方案1】:

    从 C++ 切换到 C# 时首先要考虑的是,它们大多共享一些表面语法,但是随着您对 .Net 的深入研究,编程范式的差异会变得越来越大。

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

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

    首先从向您介绍所有这些概念的通用 .Net 书籍开始。我首先推荐一本书,而不是阅读教程和文章,这样您就可以在最后获得.Net 的全貌。互联网上的文章可能无法做到这一点。 我读过的最好的通用 .Net 书:

    Professional C#, 3rd edition. 作者:Simon Robinson、Christian Nagel、Karli Watson、Jay Glynn、Morgan Skinner、Bill Evjen

    其次,由于您具有 C++ 背景,并且您习惯于接近金属并以接近硬件工作方式的方式思考(原始内存管理(指针、内存分配等)我可以只推荐一本书,真正揭开.Net是什么以及它的作用:

    CLR Via C# 杰弗里·里希特

    我怎么强调这本书对于每个 .Net 开发人员来说是多么,尤其是来自 C++ 并且同时是我读过的最好的 .Net 书籍之一。这本书是一种纯粹的阅读乐趣,涵盖的主题来自:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      同样: Essential .NET, Volume I: The Common Language Runtime Don Box 和 Chris Sells

      真正有趣的“幕后”上网本(但为 .net 版本 1 编写,因此可能有点过时)。

      【讨论】:

        【解决方案3】:

        当我第一次使用 C# 时,我的背景主要是 C/Unix 和 Python,以及一些 java 和尘土飞扬的 2000 年老式 VB6。我在使用 Java 完成的工作中熟悉托管运行时,并且 .Net API 的外观与早期的 MS API 有点相似。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            .Net 中了解垃圾收集。来自 C++ 领域的人们习惯于显式的内存分配和管理。在 C# 中,显式内存管理几乎不存在。

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

            根据您正在开发的产品,您可能不得不求助于从 C# 调用 Win32 API 函数。这是通过 P/Invoke 完成的,因此您可能还想了解一下它。如果您必须实际使用它,http://pinvoke.net 是非常有用的 C# 声明集合,适用于大多数 Win32 API。

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

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

                问候 弗里德里希

                【讨论】:

                • 不太像那样工作。托管 C++ 仍然是 C++,IIRC C++ 默认没有垃圾收集器。
                • C++/CLI 是 NOT C++,尽管语法几乎相同,并且在基本级别上非常兼容。它是一种全新的语言。它对托管代码使用垃圾收集器。只有非托管代码必须手动处理。
                • 我很清楚这一点,但它是 C++,让 GC 与 C++ 一起工作不是脑外科手术,只需使用 Boehm-Weisser Gc
                • 托管 C++ 主要作为一种桥接语言存在,托管代码需要与遗留 C++ 代码互操作。没有(据我所知)很多人更喜欢它的语法而不是 C#。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-05-19
                • 1970-01-01
                • 1970-01-01
                • 2011-03-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多