跳转到内容

C++ 编程:C# 与 C++ 的比较

来自维基教科书,自由的教科书

C#(发音为“See Sharp”)是一种多用途的计算机编程语言,它使用Microsoft .NET Framework满足所有开发需求。

注意
C# 的首席设计师是 Anders Hejlsberg。在 1996 年加入微软之前,Hejlsberg 在 Borland 开发 Turbo Pascal 和 Delphi。在微软,他担任 J++ 的架构师,并且仍然是 .NET 框架开发的关键参与者。

我们已经涵盖了Java。C# 非常类似,它采用了 C++ 的基本运算符和风格,但强制程序类型安全,即在称为虚拟机的受控沙箱中执行代码。因此,所有代码都必须封装在对象中,以及其他事项。C# 提供了许多补充功能,方便与Microsoft 的 Windows、COM 和 Visual Basic 进行交互。C# 是一种 ECMA 和 ISO 标准。

C# 是微软对(当时由 Sun 开发的)Java 语言的回应,Java 语言开始对企业产生重大影响。在他们试图将 J++ 推向市场失败以及与 Sun 的法律纠纷后,微软将重点转向了托管语言,即使是以维护拥有大量开发人员基础的 Visual Basic 的相关性为目的,因此随着 Windows “Longhorn” 项目(后来成为 Windows Vista)的宣布,推向托管语言及其与 Windows 操作系统的集成开始了,他们相信从那时起,“所有新的 Windows API 将是托管的”。

然而,今天,微软似乎终于意识到,即使考虑到 Java 的采用,托管语言也缺乏开发操作系统的要求。微软甚至开始了一个基于 C# 的操作系统来测试这个前提,但最终意识到所有主要软件项目,甚至附带 Windows 操作系统的实用程序,大多是基于 C 或 C++ 的。即使托管代码仍然有一席之地,C 和 C++ 最终被公认为未来可预见的软件行业的核心语言。在 Windows 中,这被看作是营销机器长期笼罩开发人员的黑暗时代之后,迎来的“C++ 复兴”。

C# 和 C++ 之间的一些相似之处
  • 它们都是面向对象的语言,这意味着它们使用类、继承和多态性(尽管语法不同)。这可以被认为是一个区别,因为 C# 被认为是一种纯粹的面向对象的语言,而 C++ 支持各种其他范式
  • C# 和 C++ 都是编译语言,这意味着源代码必须转换为二进制格式才能运行。
C# 和 C++ 之间的一些区别
  • C++ 编译为机器代码,而 C# 编译为中间表示,它在公共语言运行时 (CLR) 虚拟机上运行。
  • C# 通常不使用指针,而在 C++ 中,指针经常被使用。C# 只允许在不安全模式下使用指针。
  • C# 主要由 Windows 使用,这并不方便,但 C++ 可以毫无问题地在任何平台上使用。
  • C++ 可以制作独立应用程序,而 C# 则不能。
  • C# 支持 foreach 循环,但 C++ 不支持。
  • C++ 支持多重继承,但 C# 不支持多重继承
  • C# 除了 private、public 和 protected 之外,还有两个额外的修饰符,分别是 internal 和 protected internal。
  • C++ 更常用于应用程序开发,因为它与硬件有直接的交互,并且对性能的要求更高,但 C# 编程主要用于 Web 和桌面应用程序,这些应用程序的性能并不那么重要。


C# 相比 C++ 的缺点
  • 限制:在 C# 中,诸如从类继承多重继承(C# 实现了一种不同的方法,称为多重实现,其中一个类可以实现多个接口)、在堆栈上声明对象、确定性销毁(允许RAII)以及允许将默认参数作为函数参数(在 C# 版本 < 4.0 中)等功能将不可用。
  • 性能(速度和大小):使用 C# 构建的应用程序与本地 C++ 相比,性能可能并不那么好。C# 有一个侵入式垃圾收集器、引用跟踪和其他框架服务的一些开销。仅 .NET 框架本身就具有很大的运行时占用空间(约 30 MB 内存),并且需要安装多个版本的框架。
  • 灵活性:由于依赖于 .NET 框架,操作系统级功能(系统级 API)被一组通用的函数缓冲,这将减少一些自由度。
  • 运行时重新分发:程序需要与 .NET 框架一起分发(Windows XP 之前或非 Windows 机器),类似于 Java 语言的问题,并附带所有正常升级要求。
  • 可移植性:完整的 .NET 框架只在 Windows 操作系统上可用,但有一些开源版本提供了大部分核心功能,也支持 GNU-Linux 操作系统,例如 MONO 和 Portable.NET http://www.gnu.org/software/dotgnu/pnet.html。例如,对于 C# 和 CLI 扩展到 C++,有 ECMA 和 ISO .NET 标准。
C# 相比 C++ 的优点

C++ 中有几个缺点在 C# 中得到了解决

  • 一个比较微妙的缺点是使用引用变量作为函数参数。当代码维护者查看 C++ 源代码时,如果调用的函数在某个头文件中声明,则立即代码不会提供任何指示,表明函数的参数是以非 const 引用传递的。按引用传递的参数可以在调用函数后更改,而按值传递或按 const 传递的参数则不能更改。一个不熟悉该函数且正在寻找变量意外值变化位置的维护者,还需要检查该函数的头文件,以确定该函数是否可能更改了该变量的值。C# 坚持在函数调用中(除了函数声明)放置ref关键字,从而提醒维护者该值可能会被函数更改。
  • 另一个是内存管理,C# 在虚拟机中运行,虚拟机具有处理内存管理的能力,但在 C++ 中,开发人员需要自己处理内存。C# 有一个垃圾收集器,它释放那些不再使用的对象所指向的内存。

一个比较C++ 与 C# 的示例可以在这里找到。

华夏公益教科书