C#适用于Win32还是C++?

4

我知道C++的Windows编程比C#更难。因为我们需要创建WNDCLASS并初始化它,使用API函数等等...

但是我的问题在于,对于Windows编程,C#比C++更好吗?

如果是,为什么还有很多大型程序使用C++创建?


3
你认为是什么原因导致没有用C#创建大型程序?你见过多少个大型程序? - Lex Li
2
哪些程序是用C#编写的? - S.A.Parkhid
4个回答

9
当需要编写硬件驱动程序或其他与硬件交互的程序时,限制C# managed code所能做的事情的范围是有限的。甚至在纯粹的托管代码中也无法访问所有Win32 API。一些程序具有高性能要求,因此更适合使用C++。有时候,C++被使用仅仅是因为开发该软件的公司拥有熟练的C++开发人员。有时候,选择C++是因为开发人员不希望软件依赖于.NET框架(这在XP和早期版本的Windows上未预装)。有时候,选择C++是为了开发跨平台应用程序。
总的来说,C#比C++/MFC/COM等语言和框架更易学习、更强大、更高效。但是,C++是一个非常广泛的工具,可以解决许多非常不同的问题,例如编写操作系统、实时系统、嵌入式应用程序、数据库、商业软件、桌面软件、服务器软件、库/框架等。
C#更适合特定类型的问题,它基本上只能在Windows上运行(除了Silverlight和Mono)。C#适用于快速应用程序开发,因此更适合于大型组织内部开发的许多内部应用程序。正如我所指出的,C#更适用于开发桌面和服务器应用软件,而不是驱动程序和其他低级软件。
如果你正在考虑学习哪种语言,明智的选择应该是:先学习C,然后是C++,最后才是C#。这将为您打下基础,让您成为一个真正优秀的面向对象程序员,并理解我们有多幸运能拥有C#!如果您没有10年的时间,那就直接开始学习C#。无论您做什么,都不要从C++开始,否则您可能会因绝望而放弃编程生涯并加入马戏团,因为那里的事情更有意义。

我同意C#更容易学习和更高效,但我认为C++是更强大的语言。C#主要是面向对象编程(OOP);而C++则是多范式的。特别是,C++内置了一种函数式语言,可以将编译器作为代码生成器进行编程(模板元编程)。 - Stephen Cleary
我猜“强大”这个词是很主观的。我认为“强大”意味着“对程序员有赋能作用”,这正是我对C#的感觉 - 我觉得我可以做任何事情(在我的问题域内),而且语言会给予支持。 - saille

4
如果我可以从头开始做过去所有的C++项目,99%的代码都会用.NET。特别是涉及到用户界面方面。WPF、Winforms比MFC更强大。
您将开发哪种类型的程序?请详细说明,然后我们可以提出建议。
**编辑
一个很好的例子就是Visual Studio本身。现在VS 2010基于WPF。

例如,Notepad++ 是用 C++ 创建的。如果他们使用 C# 而不是纯 API 编写它,会发生什么? - S.A.Parkhid
看一下SharpDevelop吧。它是一个用C#编写的开源IDE。 - Marlon
我对Notepad++并不是很熟悉,但如果我要开发它的话,我会使用C#。我想不出为什么要使用C++的任何理由。 请记住,你可以轻松地从C#中调用任何非托管的C++动态链接库(PInvoke)。在.NET中编写UI代码要好得多。 - santiagoIT
1
在某个复杂平台上实现文本查看器/编辑器(或Windows注册表编辑器)通常是一个坏主意,因为当该平台配置错误时,您需要使用的工具也会出现故障。 - Ben Voigt
我很高兴你说的是.NET,而不是“C#”。因为真正强大的是框架,而不仅仅是语言。 - Marlon

4
更好?更好在哪里?更容易?更快?
C++ 是一个庞然大物,学起来非常复杂。相比之下,C# 更加“友好”和易于使用。C# 通常能够让你比 C++ 更快、更轻松地完成任务,因为语言及其框架会为你做很多工作。这是 C# 比 C++ 更好的原因之一,也是 C++ 比 C# 更好的原因之一。
如果你让 C# 为你工作,那么作为程序员,你就要牺牲一些控制权。这就是高级语言与低级语言的区别。对于需要的应用程序,程序员倾向于选择提供必要抽象程度同时仍提供所需控制的语言。这就是为什么许多需要的应用程序(如视频游戏)都是用 C++ 编写的原因。它具有相当丰富的高级功能,同时还具备拉出真正低级代码以实现绝对硬件控制的马力。这也是为什么许多商业应用程序和其他不那么苛刻的应用程序都是用高级语言(如 C#)编写的原因,因为这些应用程序没有使用低级功能的必要,并且可以安全地享受高级功能的收益而不必担心性能惩罚。
在 C# 的情况下,所有使用它创建的应用程序都在 .NET 运行时环境中运行。对于需要快速运行的程序来说,这是一个劣势,因为你希望尽可能靠近硬件。因此,C++ 在需要执行速度或内存使用率至关重要的应用程序中获胜。此外,C++ 可以在非常多的平台上使用,从个人电脑到咖啡机(好吧,那就是手机),而 C# 官方仅限于运行 Microsoft Windows 的平台。
至于在 Windows 上开发的易用性,C# 明显胜出。C++ 也有可用的框架,但与 C# 相比,在快速轻松地完成任务方面差距很大。尽管如此,在 C++ 中编写复杂的 GUI 应用程序也完全可行,而且不会让人过多地抱怨。
无论如何,我希望你看到了这种比较语言的意义之小。这很像比较锤子和螺丝刀。选择一种语言是选择适合工作的正确工具。许多工具重叠 - 你可以在 C++ 和 C# 中实现几乎相同的功能,这使得选择变得更加复杂。如果你真的想了解更多(做出“有根据的选择”),我建议你阅读有关各个语言的资料。如果你只是想知道应该学习哪种语言,我建议你先学习 C#,如果以后需要(或者想要)再学习 C++。

3

C++和C#都是非常好的编程语言,不过它们各有特点。

C++适用于需要高度优化内存和CPU使用的应用程序,例如非常低级别的设备驱动程序开发。

C#则更适合创建业务应用程序,例如会计和基于数据库的应用程序,如果尝试在C++中构建这些应用程序,则可能需要很长时间。

简而言之,

C++ is for applications which require highly optimized memory and CPU usage.
C# is far productivity and enterprise applications 

例如,Notepad++ 是用 C++ 创建的。如果他们使用 C# 而不是纯 API 编写它,会发生什么呢?Notepad++ 是一个编辑器。 - S.A.Parkhid
他们仍然可以使用C#创建类似Notepad ++的应用程序,我想象它会更具可插拔性,基于Web,在线更新将变得更加容易。另一方面,它可能会占用更多的内存,但在我的意见中,这是可以接受的。 - RaM

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