- 浏览: 1076460 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- C++ (39)
- Java (74)
- Java界面开发学习笔记 (4)
- Java用户的c++之旅 (0)
- 自言自语 (12)
- DSP (1)
- MCU (0)
- CG (0)
- Jabber (0)
- Gloox (0)
- Linux (11)
- Windows (19)
- Networks (4)
- Jobs (0)
- PHP (1)
- JSP (2)
- 生活 (35)
- C (2)
- Qt4 (2)
- C# (50)
- WPF (5)
- ASP (2)
- FLEX (47)
- SQL (20)
- JavaScript (12)
- SharePoint (6)
- GWT (1)
- Dojo (9)
- HTML (11)
- Others (7)
- 如何安装配置系列 (7)
- UML (2)
- Android (3)
- alibaba (1)
最新评论
-
zxjlwt:
学习了http://surenpi.com
Firefox插件开发: Hello World! -
ylldzz:
楼主知道MVEL怎么调试么
MVEL简介及快速使用 -
blueman2012:
您好,可否提供源码下载,我把您的代码贴过来后,好多报错的,谢谢 ...
Log4J日志解析 -
svygh123:
你的游标都没有关闭呢!
MYSQL游标嵌套循环示例 -
dizh:
写的很好啊
MVEL简介及快速使用
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++相比较,更加复杂,还显得臃肿和凌乱。
附:
1,C#不支持多重继承,这是与C++明显区别的地方,说真的多重继承有时候用起来挺麻烦的,可能微软怕你用不好吧,不给你提供了,但我个人觉得没有了多重继承感觉有点可惜。
2.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象。
3.C#中所有对象都只能通过关键词“new”来创建,C++的“类名_对象名”方式在C#中变为声明一个引用。呵呵,万物皆对象,连常见的数据类型都变为对象了,JAVA味道很浓。
4.数组变为了类,因此对于数组里的元素,.NET Framework直接提供了一系列的操作:查找、排序、倒置……
5.在C#里面,数组的元素都是存放在托管堆里面,比起C++的在内存里不确定位置申请一块连续空间要安全得多。
6,C++的switch后跟参数必须是int型,而C#却允许string型,这点改进觉得真的是比以前方便多了!
7.C#会禁止所有switch..case语句的失败情形,除非case语句后是空格,否则执行了前一个case语句就算没有break也会停止执行后面的case语句。
8.在异常处理上,C++允许抛出任何类型,而C#中规定抛出类型为一个派生于System.Exception的对象。
9.C++的宏在C#中被抛弃了很多,而且也不建议使用,因此很少见。
10.C++的模板在C#里没有了,但在C#中我们找到了能完成模板任务的更锋利的武器:委托。
11.C++的全局变量这一概念没有了,C#和JAVA类似,要把所有东西都放在类里面,还建议使用命名空间包含起来。
12.C#可以在定义类的时候直接给属性赋值,而C++这么做却会编译出错。
13.C#里有静态构造函数一个概念,这个构造函数只执行一次,因此能够保证一些静态成员只被初始化一遍。
14.C#有自动垃圾收集机制,防止内存泄露,把C++程序员从繁重的内存管理上解放出来。
15.更强的类型转换保护机制,比如说把float转成uint,直接转换0.35会变成0.34,是因为二进制无法表示这样的数字,使用System.Conver里的方法,可以安全地把类型安全转换过来。
16.委托与事件、装箱与取消装箱、Web Services……一大堆C++没有的新东西,我感觉是做大型项目方便了管理,也容易扩充,但做起小型项目,由于是编译成IL代码的,运行需要.NET Framework SDK支持,效率是个问题,不利于做那些对运算速度和内存消耗要求高的项目。
三者中,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++相比较,更加复杂,还显得臃肿和凌乱。
附:
1,C#不支持多重继承,这是与C++明显区别的地方,说真的多重继承有时候用起来挺麻烦的,可能微软怕你用不好吧,不给你提供了,但我个人觉得没有了多重继承感觉有点可惜。
2.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象。
3.C#中所有对象都只能通过关键词“new”来创建,C++的“类名_对象名”方式在C#中变为声明一个引用。呵呵,万物皆对象,连常见的数据类型都变为对象了,JAVA味道很浓。
4.数组变为了类,因此对于数组里的元素,.NET Framework直接提供了一系列的操作:查找、排序、倒置……
5.在C#里面,数组的元素都是存放在托管堆里面,比起C++的在内存里不确定位置申请一块连续空间要安全得多。
6,C++的switch后跟参数必须是int型,而C#却允许string型,这点改进觉得真的是比以前方便多了!
7.C#会禁止所有switch..case语句的失败情形,除非case语句后是空格,否则执行了前一个case语句就算没有break也会停止执行后面的case语句。
8.在异常处理上,C++允许抛出任何类型,而C#中规定抛出类型为一个派生于System.Exception的对象。
9.C++的宏在C#中被抛弃了很多,而且也不建议使用,因此很少见。
10.C++的模板在C#里没有了,但在C#中我们找到了能完成模板任务的更锋利的武器:委托。
11.C++的全局变量这一概念没有了,C#和JAVA类似,要把所有东西都放在类里面,还建议使用命名空间包含起来。
12.C#可以在定义类的时候直接给属性赋值,而C++这么做却会编译出错。
13.C#里有静态构造函数一个概念,这个构造函数只执行一次,因此能够保证一些静态成员只被初始化一遍。
14.C#有自动垃圾收集机制,防止内存泄露,把C++程序员从繁重的内存管理上解放出来。
15.更强的类型转换保护机制,比如说把float转成uint,直接转换0.35会变成0.34,是因为二进制无法表示这样的数字,使用System.Conver里的方法,可以安全地把类型安全转换过来。
16.委托与事件、装箱与取消装箱、Web Services……一大堆C++没有的新东西,我感觉是做大型项目方便了管理,也容易扩充,但做起小型项目,由于是编译成IL代码的,运行需要.NET Framework SDK支持,效率是个问题,不利于做那些对运算速度和内存消耗要求高的项目。
发表评论
-
策略模式
2010-10-08 16:34 1172一、概念 策略模式(Strategy):它定义了一系 ... -
C#获取返回错误码
2010-05-21 17:59 1809[DllImport("TestWin32Dl ... -
VS.NET 开发Windows服务的步骤
2010-05-20 14:25 1600在很多应用中需要做windows服务来在一些后台操作,比如监视 ... -
c# 允许服务与桌面交互
2010-05-20 14:20 2702我们写一个服务,有时候要让服务启动某个应用程序,就要修 ... -
C#单例模式的三种写法
2010-05-19 15:58 48574第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, ... -
C#中获取我的文档系统文件夹路径
2010-05-17 15:29 2270本技巧使用GetFolderPath方法来获取指向由指定枚 ... -
C#自定义事件的步骤介绍
2010-05-13 17:54 3293通常C#自定义事件有下面的几个步骤: ... -
使用反射机制遍历对象中的属性名及属性值
2010-05-03 16:20 2843首先描述一种情景,当给你一个VO类(这个类是映射到数据库的表 ... -
C#的逆向工程-IL指令集
2010-04-30 10:28 1676一些 IL 语言解释: ... -
使用SqlHelper时“阅读器关闭时read的尝试无效”的解决方法
2010-04-20 14:54 1817原SqlHelper类中ExecuteReader方法体 ... -
C# 删除文件夹
2009-12-31 11:28 2559/// <summary> ... -
System.Windows.Forms.Timer和System.Timers.Timer的区别 [转]
2009-12-16 23:44 5201.NET Framework里面提供了三种Timer: ... -
关于var1=var2=something赋值语句的思考
2009-11-18 16:16 1234刚才在阅读《c#本质论》一书时,开头有提到var1=var2= ... -
C#使textbox滚动到最新一行
2009-11-16 12:33 2538方法1: textBox.Text += " ... -
Invoke()/BeginInvoke()区别
2009-11-15 17:43 7225查看MSDN如下: Control..::.Inv ... -
Invoke 和 BeginInvoke 的真正涵义
2009-11-15 17:37 1327BeginInvoke 方法真的是新开一个线程进行异步调用 ... -
编写安全的多线程C#程序
2009-11-15 01:24 1904与多线程相关的两个常见的需要解决的问题是:临界资源保护和线 ... -
线程,同步与锁——Lock你到底锁住了谁
2009-11-15 01:18 1595线程在多核时代的优势月来越明显,多线程编程的学习也提上议事日程 ... -
关于lock(this)的说明及用法
2009-11-15 01:16 5349一. 为什么要lock,lock了 ... -
远程dll注入 C#
2009-11-14 16:43 3137using System; using System. ...
相关推荐
易语言、Java、C#和C++的比较和应用 易语言、Java、C#和C++是四种不同的编程语言,每种语言都有其自己的特点和应用领域。易语言是一种简单易学的语言,主要用于开发桌面应用程序和游戏;Java是一种面向对象的语言,...
它的类库相比Java、C#和C++来说不够丰富,但能满足基本的编程需求。易语言编译后的程序通常直接运行在Windows平台上,不强调跨平台性。 【Java】 Java是一种广泛使用的面向对象的编程语言,其代码编译成字节码后在...
### C#与C++的主要区别 #### 面向对象编程特性 - **语言起源**:C#作为较新的面向对象编程(OOP)语言,它在设计时充分吸收了C++和Java的优点,旨在提供一种更为现代且易用的编程体验。 - **共性与差异**:虽然...
c# 和 c++ 通用加密解密 。有c#和c++的例子代码。亲测可用 c# 和 c++ 通用加密解密 。有c#和c++的例子代码。亲测可用 c# 和 c++ 通用加密解密 。有c#和c++的例子代码。亲测可用 c# 和 c++ 通用加密解密 。有c#和c++...
C#和C++作为两种广泛应用的编程语言,各自拥有独特的特性和优势。C#以其强大的.NET框架和面向对象特性,深受Windows平台开发者喜爱;而C++则以其底层控制能力和高性能,在系统级编程和游戏开发等领域占据一席之地。...
标题中的“通过CLR连接C#和C++的简单模型”指的是使用.NET框架的公共语言运行时(Common Language Runtime,简称CLR)来实现C#和C++之间的互操作性。CLR是微软开发的一种运行环境,它允许不同编程语言编写的代码在...
6. **性能优化**:为了提高通信效率,可以考虑使用异步操作,利用`BeginRead`和`EndRead`(C#)或`ReadFileEx`(C++)进行非阻塞读取,以及`BeginWrite`和`EndWrite`(C#)或`WriteFileEx`(C++)进行非阻塞写入。...
首先,我们需要了解C#和C++之间的互操作性是通过`Platform Invoke (P/Invoke)`和`.NET Framework`的`Common Language Runtime (CLR)`实现的。P/Invoke允许.NET应用程序直接调用非托管(如C++)代码中的函数,而CLR则...
在这个例子中,`MyClass_MyFunction_Create()`和`MyClass_MyFunction_Destroy()`是C++DLL中创建和销毁类实例的函数,需要在C#中对应的DllImport声明。`MyClass_MyFunction()`是类方法的C风格接口。 为了更好地管理...
C#和C++的区别理解 C#和C++是两种不同的编程语言,它们的设计目的和应用场景不同。C++是一种面向对象的编程语言,设计目的是提供高效的性能和面向对象特性,同时保持与C语言的兼容性。C#是基于虚拟机机制的编程语言...
在编程世界中,C# 和 C++ 是两种广泛使用的编程语言,它们各自有着不同的特性和设计哲学。然而,由于 .NET Framework 的引入,这两种语言在某些方面有了交集,尤其是在数据类型方面。以下是对 C# 和 C++ 数据类型的...
在这个实例中,我们关注的是"C#"和"C++"之间的交互,特别是如何通过C#调用C++编写的动态链接库(DLL)来实现人脸识别功能。这个"C#与C++之间传递图像.zip"压缩包包含了实现这一目标的示例代码。 首先,让我们了解C#...
在编程领域,有时我们需要在不同语言之间进行交互,例如C#和C++。在C#中调用C++编写的动态链接库(DLL)是一种常见的跨语言通信方式,特别是当C++库提供了某些C#中没有的功能或者优化的性能时。本文将详细探讨如何在...
在.NET框架中,C#是一种常用的编程语言,而C++则有着广泛的应用,尤其是在系统级编程和高性能计算领域。有时我们需要在C#项目中利用已有的C++库或API,这就涉及到了跨语言互操作性。本文将详细介绍如何在C#中调用C++...
在这个文档中,我们对C++数据类型和C#数据类型进行了对照,以便开发者能够快速地查找和转换类型。 首先,让我们来看一下基本数据类型的对照表: * C++中的WORD对应C#中的ushort,因为它们都是16位无符号整数。 * ...
C# To C++ Converter是一款将C#代码或者项目转换为C++的工具 转换所有版本的C#代码 许多转换和格式化选项 选项可用于C ++ 11输出 代表和事件从C#到C ++的优秀转换 操作符重载从C#到C ++的精确转换 评估所有引用...
在IT领域,跨语言通信是常见的需求之一,尤其是在C#和C++的混合编程中。本文将详细探讨如何在C#中调用C++编写的动态链接库(DLL),执行回调函数并传递结构体参数。这涉及到.NET Framework的P/Invoke(Platform ...
本文将深入探讨C#和C++中Hook的实现方式,以及DLL的打包与使用,这对于理解系统底层运作和进行软件调试、监控等任务极其有用。 首先,我们来看C#中的Hook技术。在.NET环境中,C#通过System.Threading.Thread类的...