C#与C++的区别!
(1) 编译目标:C++代码经常编译成汇编语言。而C#则编译成中间语言(IL)它与Java的字节代码有些相似。IL随后在通过Iust-In-Time编译进程转换成本机的可执行代码。IL代码将作为一个装配件存储在一个或多个文件中,一个装配件就形成一个单元,IL代码就是在该单元中被打包的,对应于C++编译器创建的一个DLL或可执行文件。
(2)内存管理:C#将开发人员从记账式的内存管理任务中解放出来,不再需要显式地删除动态分配的给堆的内存,而C++则要这么做,无用存储单元收集器将周期性地清空不再使用的内存,为了使这一功能简便的执行,C#限制了存储在堆栈中变量的使用。对于数据类型的安全性,C#的要求比C++更严格。
(3)指针:C#中指针的运用可能与C++一样,但它只用于已特别标记为应用指针的代码块中。对于大部分的程序,C#依赖VB/Java风格的对类实例的引用,而不需和C++一样频繁地使用指针。
(4)运算符重载:C#中可用来显式重载的运算符比C++要少,很大程度上是因为,C#编译器是运用一些定制的基本操作符重载(如=)来自动计算出组合操作符的重载(如+=)。
(5)库:C++和C#都依赖于扩展库的出现,ANSI C++依赖于标准库,C#依赖于.NET基类。而.NET基类是以单一的继承为基础,而标准库是以继承和模板为基础。ANSI C++的库和语言本身是分离的,C#中则是互相依靠的,关系更为紧密。并且很多C#关键字的执行都依赖于特定的基类,
(6)目标环境:C#是基于GUI的环境下(不仅仅是Windows环境,尽管现在只是在Windows中可用)专门为编程和背景服务(如Web服务)而设计的。这与语言本身无关,而是反映在基类库的设计中。相比较,C++是在命令行用户界面时期被开发的,C#和标准库都不支持GUI元素。在Windows中,C++必须直接或间接地依靠Windows API来实现这一支持。
(7)预处理指令:C#包含一些预处理指令,它的语法和C++一样。但C#的预处理指令少得多,因为C#的其它语言特性使得这些指令不再重要。
(8)枚举:C#的枚举比C++中枚举的功能更为广泛。它们在权限范围内的语法结构很成熟,可支持不同的属性与方法。要注意的是,只有当代码编译为本机可执行代码时,这一支持才存在于源代码中。枚举仍是作为基本的数字类型来执行的,所以不会存在性能上的损失。
(9)析构函数—当析构函数被调用后,C#不能保证它的执行除非要除空的是具体的外部源代码,如文件与数据库连接,C#不可以在析构函数中放置代码,而C++则可以。因为无用存储单元收集器清空的是所有动态分配的内存,所以析构函数在C#中没有像在C++中那么重要。有些情况下,仅可能地清空外部源代码是很重要的,C#将执行一个包括Idisposable界面的替换机制。
(10)类与结构:C#正式区分了类(一般用于包含许多方法的大型对象)和结构(一般用于只包含变量集合的小型对象)类和结构的存储方式不同,结构不支持继承。它们还存在一些其它的区别。
作为一种新的语言,C#也拥有一些自己的特性,而这些特性是别的语言所不具备的,让我们来看一看:
委托:C#不支持函数指针。但委托可以实现对应的功能,它把引用以一种特殊的形式封装到方法中。委托可以在方法之间传递,用于调用包含引用的方法。这与C++指针的工作方式相同。委托的意义在于,它可以合并一个对象引用和一个方法引用。与函数指针不同的是,委托包含了调用类中方法实例的信息。
事件:事件与委托相似,但它支持回调模式。就是当执行一些操作时,客户通知机器,将这些操作通知给它。工作方式与VB相同。
特性:这一概念在VB和COM中应用的很广,C#中也导入了这一概念。一个特性就是类中的一个方法,或者是类中的获取/设置方法。从类的外部来看,它更像是一个字段。可以编写代码:MyFormHeight=400,但不能写为:MyForm.SetHeight(400)。
接口:可以将接口看为是一个抽象的类,其目的是用来定义类同意执行的方法和属性。C#接口与COM接口不同—C#接口是简单的方法列表,而COM接口有其它的相关的特性,如GUIDS,但他们的原理基本相同。C#运用了接口继承的原理,因此,类继承的是函数的定义,而不是执行方式的定义。
属性:C#可以用特性元信息(如属性)来修饰类、方法和参数等。可以在运行时内访问属性,已决定代码的执行。
确定线程:C#的lock语句可支持线程同步(C++不支持线程,必须在代码中通过调用API或其它的类库来实现)
反射:C#中,代码可自动获得已编译的装配件(库和可执行文件)中的类定义的信息。可以编写显示类和方法信息的程序
http://blog.csdn.net/freeplayer/article/details/1675710
C#与C++的区别!的更多相关文章
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- 【原】nodejs全局安装和本地安装的区别
来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...
- 探究@property申明对象属性时copy与strong的区别
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...
- X86和X86_64和X64有什么区别?
x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为&qu ...
- Java中Comparable与Comparator的区别
相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...
- MySQL中interactive_timeout和wait_timeout的区别
在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...
- 设置line-height:1.5和line-height:150%或者line-height:150px的区别
直接正题: 看一下line-height可能的值: 其实可以分为两类: (1)不带单位的(如line-height:1.5),这种是推荐使用的: (2)带单位的(如line-heigth:30px/1 ...
- C#中Length和Count的区别(个人观点)
这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...
- select、poll、epoll之间的区别总结
select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...
随机推荐
- JavaScrip之对象与继承
这章主要学习对象.原型.原型链和继承,比较核心,所以单独整理这一章的内容. 理解对象:一组名值对,值可以是数据或函数. 属性类型:1数据属性:包含一个数据值的位置.在这个位置可以读取和写入值,4个描述 ...
- c++ 覆盖、重载与隐藏
成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生 ...
- tkinter 在 x window 下的字体设置格式
X Font Descriptors # X Font Descriptors are strings having the following format (the asterisks repre ...
- Intelij IDEA 2016.3安装mybatis插件并激活教程
转载自:http://blog.csdn.net/solo_talk/article/details/53540449 现在Mybatis框架越来越受欢迎,Intelij IDEA这个编辑器逐渐成为很 ...
- Layout in Rails
参考链接:http://guides.rubyonrails.org/layouts_and_rendering.html#structuring-layouts layout layout最基本的使 ...
- wifi,网关相关标识的获取
获取WIFI的相关信息 - (void)getWifiInfo { NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfa ...
- 【转】 71道经典Android面试题和答案,重要知识点都包含了
,,面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 ...
- CAD二次开发---导入外部文件中的块并输出预览图形(五)
思路: 1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中. 2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创 ...
- 去重 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN
关键字 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN 按照分组字段进行排序并标编号 ROW_NUMBER() OVER(PARTITIO ...
- 设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)
意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 • 一个系统要独立于它的产品的创建.组合和表示时. • 一 ...