接下来的实习中可能要用到C#,趁着这几天空闲,复习一下。
C#是三大主流OOP(面向对象编程)语言(C++, Java, C#)之一,也是最新的一种,其中必然借鉴了前两者的长处,“否则它的缔造者就该打屁股”——候捷语,见《C# Primer 中文版》的译续:-) 它们三者有太多的共性,其语法和编程概念,绝大部分彼此兼容,精一而通三。尤其对熟练掌握C++的程序员而言,学习Java和C#没有任何难度,唯一需要花些时间的地方就是熟悉这二者的类库。
三者中,C++是我最熟悉也最喜欢的,在学习C#时难免会将其与C++做对比,现将C#与C++的区别做一番小结。这是我花了大概三个小时看完《C# Primer 中文版》的前两章的心得,难免回有不少错误和偏差,暂且记下,以后纠正。
1、 C#与Java类似,编译后得到的还不是机器代码,而是运行在虚拟机中的元指令。它对安全性做了更多的考虑,没有指针,不能直接操作内存,自动实现内存管理。C++中的指针在带来强大的灵活性和高效的同时,也带了不少使用上的难题,C++程序中的绝大多数问题都来源于指针的不正确使用,C#出于软件安全性的考虑和语言易用性的考虑没有指针。
C#中实现自动垃圾回收,通过new在堆中创建对象,当对该对象的引用计数为0时回收内存。类有构造函数而没有析够函数。
C#没有指针这个概念,只有引用和数值之分。int等内部数据类型和struct定义的类型是数据类型,拷贝时做深度拷贝;而string和用class定义的类型是引用类型,拷贝时做浅拷贝——与深度拷贝对应,它通过引用计数来实现对象和内存管理。
C++中用指针能够轻易实现的功能,C#需要引进许多额外的机制。比如C++的函数指针,在C#中称之为delegate。C#中的参数传递,分为传值和传址两种,传址时需要加 ref 或者 out(传回改变) 关键字。
C#中的const与C++中的有所不同,它指编译期常量,而运行期间的常量要用 readonly 来指定。
2、C#的OO特性更为彻底,一切皆对象,不存在独立的函数,程序的入口Mai()函数是某个对象的public static成员函数。
所有对象都是由Object派生而来,包括内部数据类型int,float,string等,它们只是 System.int32等的别名而已。C#中没有模板,通过将参数设置为Object类型来实现类似的功能,它的 downcast 类似于C++中的 dynamic_cast 操作符。
C#没有头文件,变量、函数和类没有定义和申明的区别,都在一起。只能通过设计抽象类的方式实现代码分离。C++在这方面虽然做得还不够完美,但比C#强不少。
C#中有属性(Properties)和索引(Index)。属性类似于C++中的那些GetValue()和SetValue()成员函数,只是使用上有些差别。索引类似于C++中的重载操作符[]。
C#中在类中的成员变量声明处即可初始化,而C++中不行,两者都可以在构造函数中初始化成员变量。C#中的静态成员变量可以在静态构造函数中初始化,而静态构造函数是在该类的第一次使用时调用,而C++中是在编译单元载入时初始化静态成员变量。
3、C#的语法中多了 foreach(type v in list) statement; 而C++中需要用C++标准库的函数实现类似功能。
C+ +相对C而言,引入了许多便于实现OOP的特性,也有出于软件工程方面考虑的特性。许多C++程序员(包括我)深感它的博大精神。同时,它又继承了C语言的简介和优美,尽量用统一的风格实现尽可能多的特性,比如操作符重载、模板等。C#与C++相比较,更加复杂,还显得臃肿和凌乱。
分享到:
相关推荐
在IT领域,编程语言的选择往往是开发者们争论的焦点,尤其是对于C#与C++这两种语言。C#由微软开发,主要应用于.NET框架,而C++则是一种通用的、面向对象的编程语言,拥有广泛的应用场景。这两者的争锋,反映了不同...
《C# to C++ Converter——实现跨语言代码迁移的利器》 在软件开发领域,不同编程语言的选择往往取决于项目需求、团队技术栈以及性能优化等多个因素。C#和C++作为两种广泛应用的编程语言,各自拥有独特的特性和优势...
c# 和 c++ 通用加密解密 。有c#和c++的例子代码。亲测可用 c# 和 c++ 通用加密解密 。有c#和c++的例子代码。亲测可用 c# 和 c++ 通用加密解密 。有c#和c++的例子代码。亲测可用 c# 和 c++ 通用加密解密 。有c#和c++...
在IT领域,跨语言通信是常见的需求,尤其是在.NET框架下的C#编程中,有时需要调用C++编写的原生代码来利用其高效性或利用已有的库。本实例将详细讲解如何使用C#调用C++代码,通过DLL动态链接库实现功能。 首先,...
在.NET环境中,C#代码通常与C++代码交互是通过平台调用(P/Invoke)或托管C++来实现的。然而,当涉及到C++动态链接库(DLL)中的类时,情况会变得稍微复杂一些。本文将详细介绍如何在C#中调用C++DLL中的类,以及如何...
在这个实例中,我们关注的是"C#"和"C++"之间的交互,特别是如何通过C#调用C++编写的动态链接库(DLL)来实现人脸识别功能。这个"C#与C++之间传递图像.zip"压缩包包含了实现这一目标的示例代码。 首先,让我们了解C#...
在编程领域,有时我们需要在不同语言之间进行交互,例如C#和C++。在C#中调用C++编写的动态链接库(DLL)是一种常见的跨语言通信方式,特别是当C++库提供了某些C#中没有的功能或者优化的性能时。本文将详细探讨如何在...
本教程将详细解释如何在Visual Studio 2015(VS2015)中实现C#调用C++Dll,并附带C++源文件和说明文档。 首先,我们要理解`DllImport`属性是.NET框架提供的一种机制,它允许C#代码调用非托管代码,也就是C++的函数...
在.NET框架中,C#是一种常用的编程语言,而C++则有着广泛的应用,尤其是在系统级编程和高性能计算领域。有时我们需要在C#项目中利用已有的C++库或API,这就涉及到了跨语言互操作性。本文将详细介绍如何在C#中调用C++...
本示例以“C#与C++进程间通信”为主题,利用命名管道(Named Pipe)作为通信媒介,实现了不同类型数据结构的高效传输。 命名管道是一种在操作系统中提供半双工或全双工通信的机制,适用于在同一台计算机上的进程间...
"C#与C++类型对应表" C#与C++类型对应表是指在使用.Net互操作时,需要将C++数据类型转换为C#数据类型,以便正确地调用C++的API。在这个文档中,我们对C++数据类型和C#数据类型进行了对照,以便开发者能够快速地查找...
C#与C++混合编程涉及到将两种不同类型的代码(托管代码与本地代码)进行交互式调用,这是一个在软件开发中常见的需求。C#(发音为“看井”)是一种由微软开发的高级编程语言,它是一种面向对象、类型安全的编程语言...
本主题关注的是如何在C#环境下调用由C++编写的DLL动态链接库,实现两者之间的交互。以下将详细解释这个过程的关键知识点。 1. **C#与C++互操作性**: C#(C Sharp)是.NET Framework的一部分,它是一种面向对象的...
C# 调用 C++ 编写的 DLL 函数各种参数传递问题 在 C# 调用 C++ 编写的 DLL 函数时,参数传递是一个非常重要的部分。这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带...
### C#调用C++ DLL:结构体数组引用的传递及解析使用详解 #### 引言 在跨语言编程环境中,经常会遇到不同编程语言之间进行交互的需求。C#与C++之间的互操作就是一个典型场景。当C#需要调用C++开发的动态链接库...
在C#中调用C++编写的动态链接库(DLL)是一项常见的跨语言编程任务,尤其是在需要利用C++的高效性能或已有的C++代码库时。本篇将详细讲解如何在C#中调用一个包含二维数组的C++DLL。 首先,我们需要了解C#与C++之间...
C# To C++ Converter是一款将C#代码或者项目转换为C++的工具 转换所有版本的C#代码 许多转换和格式化选项 选项可用于C ++ 11输出 代表和事件从C#到C ++的优秀转换 操作符重载从C#到C ++的精确转换 评估所有引用...
在IT领域,跨语言通信是常见的需求之一,尤其是在C#和C++的混合编程中。本文将详细探讨如何在C#中调用C++编写的动态链接库(DLL),执行回调函数并传递结构体参数。这涉及到.NET Framework的P/Invoke(Platform ...
在IT领域,跨语言通信是常见的需求,尤其是在需要利用C++的高性能特性和C#的易用性时。本主题将深入探讨如何在C#中调用C++编写的动态链接库(DLL),并传递复杂的数据类型,如指针和数组。我们将分析标题和描述中的...