好 学c# 还是c++_c++/vc/c#/c#/vb那个更好学 - CSDN
  • C#C++的区别

    千次阅读 2019-04-20 20:58:34
    C++以后再用C#会发现C#很简单,不停的拖控件再双击添加code就行了,后来我考虑添加一个头文件放一些公有的类和函数,然后发现C#不能写头文件,也没有include。然后我觉得要去一下C#C++的不同之处 C#C++的...

    引子:

    刚开始学习C#,以前用的是C++。学习C#的原因是要做界面但是MFC实在太难了,QT的编译环境又不喜欢,然后同学就推荐了C#。

    学了C++以后再用C#会发现C#很简单,不停的拖控件再双击添加code就行了,后来我考虑添加一个头文件放一些公有的类和函数,然后发现C#不能写头文件,也没有include。然后我觉得要去学一下C#和C++的不同之处

    C#和C++的区别:

    (来自网上搜到的资料https://www.cnblogs.com/to-creat/p/4925729.html

    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(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支持,效率是个问题,不利于做那些对运算速度和内存消耗要求高的项目。
    展开全文
  •  很多学员有这样的问题:我们应该学习什么语言,java、C#还是c++?好像很多公司都找会VC的人,java和C#有用吗?甚至有人说java或C#是小公司用的语言,C++是大公司用的语言。  注:下面讨论的C++不是指。...
      此文仅代表个人观点
    

        很多学员有这样的问题:我们应该学习什么语言,java、C#还是c++?好像很多公司都找会VC的人,java和C#有用吗?甚至有人说java或C#是小公司用的语言,C++是大公司用的语言。

        注:下面讨论的C++不是指。net framework下的托管C++而是指非托管的C++.

        首先解释一下java、C#、C++和VC的关系。

        java,C#是C++后出现的语言,VC是比较早就开始有的开发工具,C/C++也是比较早的语言。java的开发工具有JBuilder、JCreator、Eclipse等,而C#的开发工具就是微软的Visual Studio系列。

        java、C#和C++各有个的优点,C++兼容性好,不依赖平台,java、C#依赖各自的虚拟机(C#的虚拟机是。net framework)运行,离开了虚拟机便不能运行;

        Java、C#开发效率高,几乎是VC的几倍以上,C++运行效率高但是开发比较麻烦,学习也比较难。

        语言没有优劣之分,这些高级语言都是现在大量使用的流行语言,任何一种语言都可以开发出大型系统,但是实际运用往往根据需要选择,除非是做底层类库开发一般不选C++,因为它开发成本太高,还有用C++的是为了部署简单,例如网络游戏,为了避免每个用户都安装虚拟机就不选用java或C#,除这些之外,一般选择开发效率较高的java、C#,这样可以降低公司的开发成本。

        现在学习编程的人大多数都学习java、C#,因为简单啊,很快上手,C++确实越来越少人学了。

        不要看着难学的VC挺cool的就去学,要看实际应用和自己的兴还有学习环境,C++学习最好有实际应用环境不然学起来累死不讨好,最后失去了信心。要知道VC已经是好几年前的技术了,微软现在基本不会升级它了,也就是说用VC你的生产效率就是几年前的,很低。

        现在很多高校都把C++作为一种必须掌握的基础语言,甚至有些非计算机专业的学生都要学习C++,但是那些要求仅仅是对C++基础知识的掌握,要熟练运用到实际开发中去还是有一段距离的。

        学java或C#有没有用呢?

        我觉得现在java和C#的前景很难分出高低,所以学java和C#差不多,而且他们都比较类似,基本可以一通“两通”。

        学习一样东西有没有用要看它的使用价值,现在公司需要的人才不单单是会简单的编程,而且是全方面的,业务和其他能力也很重要,可以说学了java你可以做一个程序员,找到工作也没问题,但是要真正深入企业业务,要工资有所提升则还要实践一段时间,充分融入到企业的业务中去。

        例如有些外包公司,他们对程序设计的要求比较低,只要会用一些主流的语言就可以了,但是对外语要求很高,例如对日外包公司对日语的要求,这样如果掌握了java或C#之后能够学习一门日语是很好的。现在有招聘单位打着日语二级软件工程师月薪1万的旗号。

        当然还有其他业务,在工作过程也是可以慢慢积累的,例如有些公司用到的GIS(地理信息系统)。

        有些学员说:

        可是我知道现在的电信行业,nokia,moto还挺需要这方面技术的人。而且薪资给的还比较高。

        我们并不是要抵制学习C++,而是说学一样东西必须看到成果,如果你有环境学C++,例如公司有项目,那就跟着学,这样有人可以问,有环境压力才能学好。我看见很多人说要学C++,但是因为实际没有用到最后几年过去了还是只背得一些基本语法。

        那VC不热的原因也是他的市场小是吗?

        其实VC也不能说不热,很多公司还是要用它的,它用得相对少,但是会的人也少,我面试过VC的人,来面试的很少有人合格的,简历写得不错,可是一问连strcpy复制了多少内存都不清楚。C++人才还是很缺的,相反会java、C#的人比较多。

        应该选择学习什么语言呢?

        我的建议是:

        对于原来没有多少计算机基础的人,建议从java、C#学起,如果以后以此找到了一份比较好的工作,你可以继续深入研究它,也可以把计算机技术和公司的业务多结合,计算机只是工具,要跟业务结合才能产生价值。如果以后有C++学习的需要,例如公司业务的需要,那可以在项目中学习它,因为有环境的需求压力和前面的编程基础学起来会比较容易一点。

        对于已经有一定的程序设计基础的人,如果你想做一些比较底层的开发,或者有实际项目的需要,可以选择学习VC.

        最后我要说:VC绝对不是大公司用的,Java、C#绝对也不是小公司用的。语言和工具在这里没有可比性,只存在各自的优缺点。


    转至:http://c.chinaitlab.com/others/200906/786924.html


    展开全文
  • C#调用C++类指南

    千次阅读 2020-04-15 09:41:44
    C#调用C++类比较麻烦,有两种方法,一种是原生C(Native C),即必须把C++的成员函数封装成C的全局函数(称为C bindings),然后再供C#调用。一种是托管C++(Managed C++)或者叫C++/CLI,可以识别C++的类和指针,...

            C#调用C++类比较麻烦,有两种方法,一种是原生C(Native C),即必须把C++的成员函数封装成C的全局函数(称为C bindings),然后再供C#调用。一种是托管C++(Managed C++)或者叫C++/CLI,可以识别C++的类和指针,语法上又更倾向于C#,能被C#调用。

            原生C的缺点在于,只有类的成员函数能重用,但类的成员数据不能重用。因此必须要在C#中重新定义这个类,类的方法也要定义,但只需调用C的全局函数即可。这样的话要重写C++类就必须要获得这个C++类的源代码,然后这个C++类的成员可能也是自定义的C++类对象,也要重写,因此就从最底层的C++类到最顶层的C++类都要重写,还是很麻烦的,况且C++有时还会调用STL的容器类,这个如何重写呢?难度还是挺大的。

            原生C可参考

    http://www.cnblogs.com/yukaizhao/archive/2011/04/27/csharp_call_cpp_class_struct.html

     

           托管C++的缺点在于,不能传递C++类。这是因为,托管C++类固然可以在其内部调用C++的类,然而如果要在托管C++类的成员函数中把C++类作为参数或返回值的话,那么是不能实现的,因为C#找不到对应的类型。因此只能传递一些基本类型或者是简单的结构体,因此使用托管C++类虽然比较快捷方便,然而只能是权宜之计。

           托管C++可参考

     http://blog.csdn.net/starlee/article/details/2864588

           

            可以通过opencvsharp进行对比学习,https://github.com/shimat/opencvsharp/releases

            里面的源代码不全,貌似要通过nuget进一步下载,我不是很会下,找到一个github可以提供完整源代码https://github.com/MrBadge/opencvsharp

     

           通过查看opencvsharp的源代码,便可以发现一些端倪,大概可以窥探到如何在C#中使用C++的类,下面我简单讲解一下。

           首先,C#虽然没有指针的概念,然而C#的类对象都是new出来的,和C++对象的其中一种创建类对象的方法很类似(还有另一种方法,就是直接创建类对象,存放在栈中)。所以最好的方法就是把这两种方法对应起来。

           由于OpenCV的函数返回值往往是C++类对象而不是指针,因此opencvsharp就专门创建了一个叫OpenCvSharpExtern的C++工程,把OpenCV的函数重新封装了一下,使得返回值是C++类对象指针。

           然后在C#中,创建这个C++类对应的的C#类,用一个IntPtr类型来对应这个C++类的指针,作为该C#类的成员。然后在C#中,调用某个函数获取这个IntPtr对象的时候,把它封装成对应的C#类对象,然后当某个函数的参数要用到该IntPtr对象的时候,就从该C#类对象中把IntPtr取出代入参数中。

           用的是原生C,要用到P/Invoke Interop这个非常陌生的东西,可参考

    http://www.cnblogs.com/dc10101/archive/2012/07/02/2573209.html

        很久没更新了,突然间查到一本书,叫做《精通.NET互操作》。已经绝版,不过网上还能找到电子书,淘宝也有影印版。

        可查看https://www.cnblogs.com/Aphasia/p/4148630.html

    展开全文
  • 以下几种程序员注定没有前途,不管你学C#还是C++...  1.基础不牢不知亡羊补牢,以为上了几天培训班就能嘲笑科班的...  2.经验不足不知脚踏实地,以为上了两天大学就可以目中无人的...  3.悟性不够不知重新...
    以下几种程序员注定没有前途,不管你学C#还是C++... 

    1.基础不牢不知亡羊补牢,以为上了几天培训班就能嘲笑科班的... 
    2.经验不足不知脚踏实地,以为上了两天大学就可以目中无人的... 
    3.悟性不够不知重新定位,以为埋头闷声苦干就可以自然提高的... 
    4.眼高手低不知虚心勤力,以为自己是芙蓉姐夫的...
    展开全文
  • 如何学习C#C++

    2017-08-10 23:23:54
    如果在此之前你已经具有足够的C++的编程经验,那么恭喜你,你已经具备了学习C#扎实的基础。如果你从未接触过编程语言,想开始学习,那么也恭喜你,希望该博文能够给你帮助。C#是一门面向对象的非常简洁、优美的语言...
  • 为什么学C++C#的长期风险低

    万次阅读 热门讨论 2010-09-16 16:19:00
    学C++的长期风险要远远低于别的语言
  • c++C#比较

    万次阅读 2011-10-06 04:32:13
    对于新手来讲 vc比c#难很多(入门学习) 实现同样的功能,vc的代码量要比c#多很多 ...是要程序运行速度快的那种,还是开发速度快的那种   C#不需要用到麻烦的mfc类,不需要头疼的*.h…… C#基于FrameWork
  • C#C++的一些语法区别

    千次阅读 2018-03-22 20:32:10
    这学期有C#的课,由于之前有C和C++的一些基础,所以并没有从头开始学习其语法,在这里总结一下实际使用中发现的C#C++的一些区别,便于以后使用时进行查阅(其实是为了考期复习方便2333) C、C++C#在宏观上的...
  • c#调用C++写的dll导出类

    千次阅读 2016-11-07 10:29:28
    网上看了一些都是调用c++写函数能不能实现c#使用c++写的类各位高手请赐教 ...这样你在C#层调用C++的这个函数,并将准备的类对像的指针传回去就了。这种方法,安全,方便,而且……你那些查到的使用C
  • C#C++的混合编程 之一 方法介绍

    千次阅读 2015-11-29 14:11:40
    C#C++的混合编程 之一 方法介绍 C#写界面比较方便,而C++则擅长写算法,所以将两者结合起来将会加快程序的开发速度,并保证程序的质量。但C#C++的混合编程有很多细节问题需要注意,下面简要列举一些并指出相应的...
  • C#是三大主流OOP(面向对象编程)语言(C++,Java,C#)之一,也是最新的一种,其中必然借鉴了前两者的长处,“否则它的缔造者就该打屁股”——候捷语,见《C#Primer中文版》的译续:-)它们三者有太多的共性,其语法和编程...
  • c# 调用c++ && c++调用c# 函数

    千次阅读 2019-03-18 16:55:57
    这几天又开始了用 c#写窗口程序,自认为用c#做窗口程序太简单了,比那什么mfc简单太多,当然可能QT等库也是比较简单,我就懒得去学习了。 //[return: MarshalAs(UnmanagedType.LPStr)] //[MarshalAs(UnmanagedType....
  • 详解C#使用C++生成的DLL

    千次阅读 2018-01-08 02:54:19
    关于这个命题,在大二刚学C#时就有想过,不过一直没有去做。如今,大学将毕,正好在毕设的需求下,收集资料作了一番学习现在此做个备忘吧! (一)项目整体框架: 整合收集的资料和自己以往所学的知识,我将整个...
  • 总结一下C++C#之间的区别

    万次阅读 2017-10-17 15:25:32
    简单来总结一下C++C#之间的区别,为更多的C++程序员转到C#阵营来,我整理了我自己的思绪,把我的一些心得体会写下来,以便大家可以更高效率地学习C#,高手见了勿见笑~ 1,C#不支持多重继承,这是与C++明显区别的...
  • 比较C#C++、Java的异同

    千次阅读 热门讨论 2014-12-21 11:53:09
    最近正在看C#视频,但是感觉效率很低,还是停下脚步总结一下、思考一下吧!  开始接触C#,我们都会有一个疑问:C#C++有什么区别呢?过Java的同学会想C#和Java有什么区别呢?  视频开始就给我们回答了这个...
  • 我现在在做一个简单的棋类游戏,因为赶时间,老师说用C#做界面会简单点,我现在只用C#画了一个界面,什么功能都没有,用C++做内核,请问我该怎么把这个界面和C++连接起来?小弟用的是VS2013,会不会需要其他软件呢?...
  • C#调用C++图像处理算法(opencv)

    千次阅读 2018-12-05 13:41:40
    C#调用C++图像处理算法(OpenCV) 因为需要做一个图像处理的程序,后来决定采用C#写界面,C++写算法调用opencv的函数。关于opencv的使用之前已经学习过了,需要实现的是在C#中如何使用C++语言编写的DLL。 参考:...
  • C#调用c++的lib/dll文件

    2019-04-12 15:19:41
    写了一个c++的库,需要拿去给c#的工程用,所以需要把封装一层。 1、直接新建一个c++工程,在工程属性里设置->常规->公共语言运行时支持,改成公共语言运行时支持(/clr) 2、在cpp文件中直接写c#就可以了@TOC ...
1 2 3 4 5 ... 20
收藏数 83,629
精华内容 33,451
关键字:

好 学c# 还是c++