C#与C++的区别

C#C++语言的区别 C#C++都是非常重要的编程语言,它们在很多方面存在区别,以下是详细介绍:C#C++:类型定义声明:函数声明定义:类对象相关语法:C#C++C#C++C#C++C#C++:综上所述,C#C++在语言类型、语法特点、内存管理、运行时环境性能、代码复用性可维护性、开发效率等方面都存在不同程度的区别,开发者可以根据具体的项目需求、场景以及自身的编程技能等来选择合适的语言进行开发。 阅读详情

三大主流OOP(面向对象编程)语言(C++、Java、C#),它们三者有太多的共性,其语法和编程概念,大部分都彼此兼容,精一门则可通三门。尤其对掌握C++的程序员而言,入门学习Java和C#没有任何门槛的,唯一需要花些时间的地方就是熟悉这二者的类库和框架。三者中,C++是我最熟悉也最喜欢的,因为最先接触C语言然后升级到C++的,在学习C#时难免会将其与C++做对比,现将C#与C++的区别做一番小结。书籍《C#Primer中文版》和《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(typevinlist)statement;而C++中需要用C++标准库的函数实现类似功能。

  C++相对C而言,引入了许多便于实现OOP的特性,也有出于软件工程方面考虑的特性。许多C++程序员(包括我)深感它的博大精神。同时,它又继承了C语言的简介和优美,尽量用统一的风格实现尽可能多的特性,比如操作符重载、模板等。C#与C++相比较,更加复杂,还显得臃肿和凌乱。

附:

  1. 1.C#不支持多重继承,这是与C++明显区别的地方,说真的多重继承有时候用起来挺麻烦的,可能微软怕你用不好吧,不给你提供了,但我个人觉得没有了多重继承感觉有点可惜。
  2. 2.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象。
  3. 3.C#中所有对象都只能通过关键词“new”来创建,C++的“类名_对象名”方式在C#中变为声明一个引用。呵呵,万物皆对象,连常见的数据类型都变为对象了,JAVA味道很浓。
  4. 4.数组变为了类,因此对于数组里的元素,.NETFramework直接提供了一系列的操作:查找、排序、倒置……
  5. 5.在C#里面,数组的元素都是存放在托管堆里面,比起C++的在内存里不确定位置申请一块连续空间要安全得多。
  6. 6.C++的switch后跟参数必须是int型,而C#却允许string型,这点改进觉得真的是比以前方便多了!
  7. 7.C#会禁止所有switch..case语句的失败情形,除非case语句后是空格,否则执行了前一个case语句就算没有break也会停止执行后面的case语句。
  8. 8.在异常处理上,C++允许抛出任何类型,而C#中规定抛出类型为一个派生于System.Exception的对象。
  9. 9.C++的宏在C#中被抛弃了很多,而且也不建议使用,因此很少见。
  10. 10.C++的模板在C#里没有了,但在C#中我们找到了能完成模板任务的更锋利的武器:委托。
  11. 11.C++的全局变量这一概念没有了,C#和JAVA类似,要把所有东西都放在类里面,还建议使用命名空间包含起来。
  12. 12.C#可以在定义类的时候直接给属性赋值,而C++这么做却会编译出错。
  13. 13.C#里有静态构造函数一个概念,这个构造函数只执行一次,因此能够保证一些静态成员只被初始化一遍。
  14. 14.C#有自动垃圾收集机制,防止内存泄露,把C++程序员从繁重的内存管理上解放出来。
  15. 15.更强的类型转换保护机制,比如说把float转成uint,直接转换0.35会变成0.34,是因为二进制无法表示这样的数字,使用System.Conver里的方法,可以安全地把类型安全转换过来。
  16. 16.委托与事件、装箱与取消装箱、Web Services……一大堆C++没有的新东西,我感觉是做大型项目方便了管理,也容易扩充,但做起小型项目,由于是编译成IL代码的,运行需要.NET Framework SDK支持,效率是个问题,不利于做那些对运算速度和内存消耗要求高的项目。
  17. 17.函数返回值类型:    C#里返回值基本上可以使任何类型,C++则不行,C++的函数返回值类型必须是除了函数和数组类型之外的其他任何类型。
  18. 18.switch(参数类型):C#参数类型可以是任何类型,C++则必须是整形。
  19. 19.数组:   以定义一个int类型的4行4列的二维数组arr为例:
       C#定义数组格式是: int[][] arr = new int[4][4];
       C++定义数组的格式是:int arr[4][4];

     

  20. 20.定义一个对象; 
    //C++  两种用法
    ClassA objA;objA.FieldA=valueA;                //对象法
    ClassA * objA=new ClassA();objA->FieldA=valueA;//指针法
    
    //C#
    ClassA objA=new ClassA();objA.FieldA=valueA;
  21. 21.函数参数类型为数组时:  C++:当参数类型为数组时,函数默认当成指针类型来处理,在函数体里改变数组里的值,函数外面也跟着改变;  C# :当参数类型为数组时,函数默认当成引用类型来处理,在函数体里改变数组里的值,函数外面也跟着改变;
  22. 22.函数参数类型为对象时:  C++:当参数类型为对象时,函数在传参时进行对象的复制,在函数体里改变数组里的值,函数外面不会跟着改变;  C# :当参数类型为对象时,函数默认当成引用类型来处理,在函数体里改变数组里的值,函数外面也跟着改变;
  23. 23.局部变量和全局变量的名称可不可以相同;C++中是可以相同的,且局部变量会覆盖全局变量的值;C#中全局变量和局部变量的名称不可以相同;
  24. 24.C++中当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化;而在C#中无论是局部变量还是全局变量系统都会对其初始化;
  25. 25.关于路径的写法:

     C#:绝对路径:D:\using\\test.txt;相对路径:using\\test.txt,表示exe同级目录下的using目录下的test.txt文件;..\\using\\test.txt表示exe所在目录下上一级目录下的using目录下的test.txt;

    C++:绝对路径:D:\\using\\test.txt;相对路径:.\using\\test.txt,表示VC源码同级目录下的using目录下的test.txt文件;..\\using\\test.txt表示VC源码所在目录下上一级目录下的using目录下的test.txt;

  26.  
  27.  

 

一文看尽C、C++C#的联系区别(改变世界的第一步) 阅读详情

相关推荐

无监督低照度增强实战:用ZeroDCESCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCESCI两大代表性模型的核心原理实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 476

C#C++区别(笔记整合归纳)

1、编译区别 C#代码首先会被编译为CLR(公共语言运行库),然后由.NET框架解析。(Java类似) C ++代码将会直接被编译为机器代码。 2、内存管理的不同 C#是在虚拟机上执行,会自动进行内存管理。而,C ++需要手动组织管理内存。 C#中实现自动垃圾回收,通过new在堆中创建对象,当对该对象的引用计数为0时回收内存。类有构造函数而没有析够函数。 3、指针使用的区别 C#不支持使用指针,但可以使用一些不安全的类方法;而,C ++允许使用指针。 C++中的指针在带来强大的灵活性

redlotu233的博客 2万+

C++C#区别概述

总结起来,C++C#在语法、内存管理、平台依赖性开发生态系统等方面存在一些差异。总结起来,C++C#在语法、内存管理、平台依赖性开发生态系统等方面存在一些差异。C++C#是两种常见的编程语言,它们在语法、用途编程范式等方面存在一些区别C++C#是两种常见的编程语言,它们在语法、用途编程范式等方面存在一些区别。可以看到,虽然两种语言的语法有些差异,但基本的逻辑结构控制流程是相似的。可以看到,虽然两种语言的语法有些差异,但基本的逻辑结构控制流程是相似的。

ByteSparkX的博客 930

C#C++区别

C#C++区别是: 1、C#代码首先会被编译为CLR(公共语言运行库),然后由.NET框架解析,它是在虚拟机上执行,会自动进行内存管理,不支持使用指针; 2、C++将会直接被编译为机器代码,允许使用指针,需要手动组织管理内存。 C#C ++的区别详细说明 1、编译区别 C#代码首先会被编译为CLR(公共语言运行库),然后由.NET框架解析。 C ++代码将会直接被编译为机器代码。 2、内存管理的不同 C#是在虚拟机上执行,会自动进行内存管理。 C ++需要手动组织管理..

菜鸟打怪的博客 5万+

C#C++的一些区别

最近在学习C#,总结了一些C#C++区别: 1.C#不支持多重继承。 2.C++文件是.h,.cpp,而C#文件是.cs。 3.c#声明类时,{}括号后没有;。 4.C/C++不同,C#在类的外部不能声明全局变量,也没有全局函数。 6.C#中的var相当于C++中的auto。 7.C#中不管嵌套级别如何,都不能在第一个名称的有效范围内声明另一个同名的本地变量。 8.C#中分为值类型引用类型,值类型放在栈里,对于引用类型,实际数据放在堆里,引用放在栈里。 9.C#中类是引用类型。 10.C#中使用

dizhang11的博客 2609

总结一下C++C#之间的区别

简单来总结一下C++C#之间的区别,为更多的C++程序员转到C#阵营来,我整理了我自己的思绪,把我的一些心得体会写下来,以便大家可以更高效率地学习C#,高手见了勿见笑~ 1,C#不支持多重继承,这是C++明显区别的地方,说真的多重继承有时候用起来挺麻烦的,可能微软怕你用不好吧,不给你提供了,但我个人觉得没有了多重继承感觉有点可惜。 2.在标准的C#安全代码中不支持指针类型的操作,然

u012154840的博客 4万+

C# 简介以及C、C++区别

C#诞生于2000年左右,旨在构建.NET平台生态系统,整合多种编程语言的优点,提供高效、安全的开发工具。随着时间推移,C#不断演进,从最初的版本逐步发展到高版本,增加了如异步编程、LINQ等高级特性,以适应不断变化的技术需求编程范式的转变。

ByteGeek 2076

C#、CC++的主要区别

3]面向过程,即系统的实现是分过很多按流程或工序设计的不同功能(函数)来实现,就是先干什么,后干什么,主要是靠函数的调用,因为面向过程没有对象,所以这些函数不属于任何对象,没有封装、继承等的灵活运用,系统一旦庞大,其设计实现的复杂性可控性跟面向对象不是一个数量级的。一大堆C++没有的新东西,我感觉是做大型项目方便了管理,也容易扩充,但做起小型项目,由于是编译成IL代码的,运行需要.NET Framework SDK支持,效率是个问题,不利于做那些对运算速度内存消耗要求高的项目。

Xecho 5813

猿创征文|【听听iecne怎么说】C语言 vs Cpp vs C# 有何区别

共同学习,加入粉丝群,加V:YAN_Pisces_Boom哈喽大家好,我是iecne,本期为大家带来的是【听听iecne怎么说】C语言 vs Cpp vs C# 有何区别?包教包会,快来看看吧!C语言适用于底层应用开发,可以对硬件进行强操控。C++适用于更可控的底层应用不喜欢Java去学C#三连->动力给个三连吧!本节课主要是写了一些杂谈,至此该课示例的思想博主已经分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。

iecne的博客 2821

C 语言 C++C#区别

今天突然好奇C、C++C#这三门语言都有个C,那么它们之间到底有什么关联呢。所以就去Google了,找到了这篇文章:Understanding the Differences Between C#, C++, and C - C# Station。看完感觉写得挺好的,就打算翻译出来。 需要注意的是,本人技术十分有限,因此翻译的准确性可能有待商榷,建议有英语基础的同学,可直接阅读源站。 开始 如果你是一个有志向的程序员,那么你可能会很难决定先学哪门编程语言。世界上有相当多的编程语言,但是在C、C++

欢迎关注,共同进步! 5923

C++C#的对比

C++C#的简单对比。来自从c++C#的开发人员笔记。

qq_25231249的博客 3282

C#编程语言的优势C++对比

本文介绍了C#的来源、优势主要功能,同时介绍C#C++的主要区别

qiaodahua的博客 4085

C#C++区别

综上所述,C#C++在语法、应用领域特性方面存在一些差异。选择使用哪种语言取决于项目需求、目标平台、开发团队技能个人偏好。如果你更关注开发效率、快速原型实现以及跨平台移动应用开发,C#可能更适合。而如果你需要更底层的控制能力、对性能要求较高或者需要现有的C/C++代码进行交互,那么C++可能更适合。C#(C Sharp)C++是两种不同的编程语言,在语法、特性应用领域上存在一些区别

tttxj12的博客 7621

C#对Java

华山论剑:C#对Java(仙人掌工作室 2001年06月29日 17:01)C#(C-Sharp)是Microsoft的新编程语言,被誉为“C/C++家族中第一种面向组件的语言”。然而,不管它自己宣称的是什么,许多人认为C#更像是Java的一种克隆,或者是Microsoft用来替代Java的产品。事实是否是这样的呢?  本文的比较结果表明,C#不止是Java的同胞那么简单。如果你是一个Ja

wildcatbb的专栏 1462

c++c#c语言

C 语言是过程式编程语言,提供低级别内存管理高性能。C++是 C 语言的扩展,支持面向对象泛型编程,保持高性能。C#是受 C C++ 语法影响的面向对象语言,设计用于 .NET 平台,具有自动内存管理丰富的标准库。尽管 C++ C# 都受到了 C 语言的影响,但它们的发展方向应用领域有很大的不同。

Random_N1的博客 4493

C++C#区别

3. 编译方式:C++是一种编译型语言,需要将源代码编译成机器代码才能运行。C#则是一种解释型语言,代码在运行时会被动态编译成中间语言,并由.NET Framework解释执行。5. 常用领域:C++通常用于开发高性能的系统级或嵌入式应用程序,如游戏、操作系统网络设备等。6. 开发效率:C++是一种底层语言,需要编写大量的代码来实现一些功能。而C#具有更高的抽象性更强的库支持,可以极大地提高开发效率。1. 语言类型:C++是一种面向对象的编程语言,而C#是一种面向对象的、类型安全的编程语言。

m0_59689621的博客 1872

C C++C#

C,C++C#三者区别 继承关系是C->C++->C# C++完全向C兼容,C程序几乎不用修改即可在C++的编译器上运行.C++也称为带类的C,在C的基础上增加了许多面向对象的概念.虽然是C的扩展,但 并不意味着C功能不如C++,最牛的操作系统是用C写的(不是C++哦). C#是微软弄的一个东东,继承了CC++的许多东西,但两者基本上 已完全不一样了.你可以把它当作一种全新的语言来学.

似水流年 2183

(二)OpenClaw-连接即时通讯平台-集成飞书完整配置指南

本文详细介绍了如何将OpenClaw飞书机器人对接,实现通过飞书聊天窗口下达指令自动执行任务的高效协作模式。主要内容包括:1)OpenClaw服务部署验证飞书账号准备;2)在飞书开放平台创建企业自建应用、添加机器人能力、获取凭证开通必要权限;3)OpenClaw服务端的首次配置,包括设置飞书通道参数启动长连接。文章提供了完整的操作步骤截图指引,帮助用户快速完成对接配置,实现AI自动化助手功能。

直到世界的尽头 2206

C# Winform通用开发框架

C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统。此框架没有任何版权限制,支持拿来商用。此框架内部集成了大部分的数据库,可以随意更换数据库,且封装好了所有的实体对象,方便程序员对数据库的操作。并且界面没有太花里胡哨,能适应各种场景的应用。有自己独立的控件,且兼容多种UI控件,如:Sunny UI。界面可以修改使用的语言,并且可以集成新的语言。此框架还有一个自动更新模块,可以自行拿来使用,在以后的商用过程中,可以用来更新系统,最后此框架是将整个系统模块化处理了,方便使用者,后期对代码的修改。然后本系统内已经实现了日常办公生活中所有的功能,包括EXEL的导出,查询,新增,删除等。最后本系统的一大亮点是开发者在菜单中添加新的功能时不需要,再去底层代码修改,直接在页面操作即可添加或者删除,就可以自动修改底层代码,大大节省了开发的时间。

上一篇: Keil MDK 和 IAR 两款ARM开发工具区别比较
下一篇: 1、嵌入式学习之uCOS-II基础入门
_laiwenjie
博客等级 码龄11年 74粉丝 27原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值