【转】C++的MFC,与C#的.NET

以下摘自各问答网站、博客论坛:

【1】MFC早已过时,现在C++多数是用来编写底层方法而不是开发桌面程序,桌面程序有Delphi,其控件库比MFC要多,微软早不维护MFC了。

【2】MFC学习曲线的陡峭是众所周知的,主要难点在于C++语言本身,和MFC使用了大量的宏和怪异的语法(主要是RTTI和Message Mapping)。但是学习陡峭不等于就是难,而是说由易到难出现的时间点靠前。用C#编写专业的、可靠的软件需要的能力一点也不比VC/MFC少。因为当你同时熟悉了各自语法、API和工具之后,更陡峭的学习是算法、软件架构、业务,这些对于不同的语言来说都必须面对。

【3】其实不是宏的问题,而是MFC本身基于C++但又不是C++,说它不是C++,因为整个编程方式和C++完全不一样,但又的确是在用C++写,当你学会了MFC不等于学会C++,辛辛苦苦花的时间浪费在了一个二次开发框架上面了(MFC等同于现在的二次开发框架,上手容易但不是在编写底层代码),等到切换到其他领域,说你会C++吧,结果直接用C++写代码,脱离了MFC的支持就完全写不来了。但是C#就不会这样,虽然C#是基于.NET框架的,但是它不像是MFC对C++封装而已,C#学会学透彻后,应用领域很广泛的,只不过效率要求很高的地方还是需要单独用C++编写DLL给C#调用,但绝不是用MFC编写DLL给C#调用

【4】MFC使用那些颇具技巧的晦涩技术是有历史渊源的,一方面是当时硬件条件的限制,另一方面,当时C++标准不统一,MFC被设计成使用更加保守的语法获得更好的兼容性。事实上MFC的兼容性是很好的,MFC可以用BCB编译,但是OWL、VCL绝对用VC编译不了。微软为什么强调“兼容性”,因为它把MFC卖给其它编译器供应商,那个时候,IBM,甚至赛门铁克都买了MFC集成到他们的C++开发工具中去。

【5】C++ 0x曾经被寄予厚望,添加了很多现代编程语言的特性,但是这些用在C++身上很尴尬。开发系统软件这些特性是鸡肋,开发者需要纯粹、简单的C++语法。甚至他们看不上本来就复杂的C++,转而使用C。开发应用软件更是用不到,现在用C++开发应用程序几乎绝迹。

【6】mfc学习的关注的更多的是机器本身的问题,底层调用,硬件,api的实现等。难一些。c#的学习关注是架构、业务流程、数据库操作等,比较容易,但是学习好需要更多的项目经验!

【7】一.如果没有C++,C#的功能绝对停止不前.因为C#就是用C/C++开发的嘛。二.底层,底层再底层这是C/C++的优势,离了C/C++对硬件控制和嵌入式程序的更新,不管你C#开发什么都白费。微软希望它一家用C/C++,你们都用它的产品C#...这样微软才能从底层控制你呀...大家用C#就知道,要添加一个功能非要找微软才行。

【8】C++和C#的区别就一句话:后者是适合做快速开发和某些系统解决方案而量身定做的。前者是全能,但是不一定做得最好。PS:谁说Java适合用来作为数据结构入门?一个连struct都不支持、无法在stack上面分配对象和数组的语言居然还被说成适合作为数据结构入门?笑死了。在这点上Java比C#差了不止一点点,更不能和C/C++相提并论

【9】直接操作其它进程,是比较底层,看上去是比较高级,但是这么做的后果就是,
违背  进程独立,各自隔离  的设计思想,引入不稳定因素,引入潜在错误,同时也把自己局限
于某个具体平台了。直接访问磁盘,直接读写端口,直接操作网卡,直接XXXX等等,看上去都是些比较高级的用法,实际上都不可避免的将平台无关性消灭,大大削弱可移植性,甚至影响稳定性。配置文件不放在自身目录,也不放在用户个人目录,喜欢往注册表里写,某些功能,不用底层操作,稍微动动脑筋就能实现,却非要搞几个系统API来实现,hook这个hook那个
。但是驱动用C来写也是非常方便的,在嵌入式上面,用GCC也是OK的,C++不是不可替代,而是C++自己还没有把C替代过去。如果widnows 7普及,杀毒软件拿C#做也未尝不可,底层用汇编或者C都可以,跟用户打交道的GUI,用C#做是非常合适的,没MFC什么事情。
【10】C++的前途,是不如过去明晰,受到Java和C的冲击不小,特别是在Linux平台
用过Gentoo或者做过lfs的都应该有所体会,用C语言写的软件,比重还是相当大的
C++过于复杂,难以驾驭,使用不当会让代码难以理解,特别是过于复杂的类层次结构
Linux内核中用C语言实现的多态,要是改成C++,恐怕理解起来就更加困难了
Linux之父创建git的时候选择了C,之所以选择C,就是为了把那些C++程序员踢出去
【11】C++不是VC,C++也不是MFC。银行不会消失,而雷曼兄弟却破产了。汇编语言没有消失,也很难消失,却在大部分场合被取代了,这就是没落。
【12】如果开发一个MIS系统我想我会选择C#,如果开发一个服务器端或是客户端程序我想我会选择C++。

【13】在Linux和Unix中充斥着大量的C/C++底层代码,Windows大量的基础代码也是构建在C/C++之上,前段时间出了那个语言排名,PHP明显超过C++,哪C++是不是就没有用了了?其实不然,这只能说明开发需求和市场发生了变化,B/S开始流行,Web开始快速发展,其实B(浏览器)也是C/C++开发的,PHP的解析器也是C/C++写的,C#的发展也是一样说明了管理类软件开发的需求大量提升

【14】JAVA和C#才是功能重复,C#也是为了对抗JAVA才出来的政治产物,管C++什么事~ ,不知道在里面评论的人不受多了有多少人耍魔兽世界,网速慢一点点就不高兴了,以后耍C#或者Java开发出来的估计你们只有跳楼了,拿C++去开发web版MIS我估计程序言只有自杀了! ASM好多年了,有没有哪个语言敢站出来说我是来替代ASM的!除了asm还有那个语言那么自信可以写0扇区? 除了C语言开发系统内核效率高速度快哪个能比?C++在游戏,视频处理,压缩数据处理上你可以用C# JAVA去写?那这个和你用C++写.Html文件差不多头大吧

【15】也许会有一种语言把这些语言特性都发挥出来,有c#的灵活,也有c++的深入,想界面,网络就用c#的那套思想,想底层,硬件就用c++的那套思想。

【16】单从效率上说,C#/Python/Java这些语言是不可能达到C/C++的水平的。除了普通的应用软件,一些科学计算软件,对效率要求很高的,基本上只能用C/C++来编写。

【17】学vc、c#都没有前途,只能成为代码工人。现在流行搞嵌入式开发、手机开发。

【18】不过有一点是可以承认的:大多数技术牛人是在C/C++领域产生的!究其原因,是因为C++这种"傻瓜语言"逼着程序员去学习,不像Java/c#,按下一个快捷键就会提示很多方法名,属性名。而c语言的很多函数都是程序员自己写的,久而久之逻辑思维就锻炼出来了!不信大家可以调查一下,C++程序员普遍(注意,我说的是普遍,没说全部)工资相当高的!难怪所做
C++的看不起做Java的,做Java的看不起做.NET的……

【19】就C++和C#本身来争论没什么意思?时代在进步,技术在更新。不可否认C#在应用层用的很广,跟“大到变态的类库”分不开,但C++在目前看来还是有一席之地的。望眼未来,肯定会有一些老语言没落,又会有一些新语言兴起

【20】C++是一个比较好的理解原理的语言,是一切之本。没有什么语言能比C++更加贴近Windows本身了,这一点也是不可否认的。

【21】C#繁杂的调用Win32 API的方式,确实让人很不舒服,C++这一点做得比它好。但是,C#强大的网络操作,代码量大大地低于C++,我们抛弃不用Socket,改用WinInet或是MFC中的封装好的网络类,比如CHttpFile,还是没C#简单。C#的傻瓜式的类库操作和面向对象编程的完美特性,确实让其成为了Windows平台上最受欢迎的语言。

【22】就说杀进程吧,C#中不通过Win32 API就那么一种方式,通过System.Diagnostics.Process找到进程,然后Kill之(如果我说的不对,使用C#的朋友请指正),而C++中,我们完全有无数种选择,就说不邪恶的,TerminateProcess,邪恶点的呢?不计其数。进程内存填0,卸载模块,消息洪水,句柄强制关闭,强制释放它的堆,太多太多了,甚至我注入进去,内部Raise一个异常,它也就挂掉了。保护进程, 不管内核下还是应用层,C#肯定是做不了的,C++有自己高端的地方,其他语言无法涉足。你见过C#做的杀毒软件吗?
【23】有太多的地方,C++根本无法涉足。拿C++做Web Services除非是大脑进水,用C++做网络蜘蛛,也根本是无聊之举,要么就C#,要么就拿Python来干(个人漏见)

【24】只要追求*的人存在,C++就不会消失;只要操作系统一天是用C++写的,C++就不会消失。

【25】OS大多是C+ASM写的吧……C++对底层支持不好,确切点说,C++还是一个高层语言,不过,微软最近似乎鼓捣了个基于.NET(记不清是.NET还是云计算了)平台的OS,未来的发展还真不好说

【26】这么说来倒也不假,C++写内核驱动,无非加个Extern "C",C++确实可以让编码简单一点,不过据说同时也会降低稳定性

【27】底层我选C,比较高层次的开发,可选的东西一大堆。如果说到Windows平台,我选C#和Python等动态语言,只选对的不选累的,比如WPF/Silverlight可以轻易做出很炫的界面,换作MFC来做,脑子进水了。
至于C++,还真不好说它的前途。至少在我日常工作中,C++的比例越来越小了,能用C做的,不用C++,更加精悍不易出错

【28】首先,有微软撑腰,借助Windows 7,.net在用户机器上会安装得越来越普遍,就如同MFC42xxx.dll的风靡一样,这由微软操心;其次,使用.net的软件不是我一个,或许用户先前安装了某种软件已经装好了.net,不是每个用户都需要去下载几十兆的.net库,再次,考虑到维护和升级的难度,开发费用,熟练使用MFC/BCG/Xtreme Toolkit/SkinMagic……的程序工人的招募费用,各种库的乱七八糟的bug和咨询费用……我宁可用傻瓜化的C#。

【29】我并没褒贬谁,我们程序员需要的是:按照需求,缩减成本,灵活选择。
【30】C#的程序员的层次分得比C++多很多,高层的也是象牙塔级别的。这句话很透彻。和楼主一样,坚持着c/c++/vc,同时也看好C#

【31】虽然C++是面向对象,面向应用的高级特性的先行者,但绝不是目前这一领域的最佳选择,包括垃圾回收,反射,属性化,动态执行等诸多特性,由于得到需求的支持而大量应用,单纯C++的力不从心,由此可见一斑。但是又很难解释,C++作为混合编程的一个衔接者,连接着操作系统和上层应用。
【32】在内核,驱动级的底层开发,甚至通信开发,C++也只是以面向过程的方式被使用,与C去竞争这一领域,C++本身的特性又无法得到真正的发挥。我们不得不承认C++的尴尬。但是我们又从C++实现高级特性的过程中,体会真相的快乐。并灵活运用。C++的部分特性被其他语言所继承,甚至被取代。在混合开发中,C++往往起到妙笔生花的作用。往往在遇到使用更高级语言无法解决的瓶颈问题时,C++总能从根本层次上提供一个解决方案。这在我经历的项目中,屡见不鲜。
【33】mfc是C++的衍生物,它的作用只是承接着历史,而未来,是否需要为C++和C提供一个足够强大的与UI有关的库,是需要考虑,但事实上,已经存在一些选择。所要做的就是等待一个标准的出现。
【34】在一些项目中,使用C++实现web service和调用web service,的确看不到足够的理由,但问题更多的在于web service本身,诸如安全,性能,以及如何传递对象等等问题

【35】微软.Net太狠了,C/C++的人都跑向Linux。Linux一定得到很大的发展.
【36】C++是一种“恶搞”~~~纷繁复杂的用法,遍地的陷阱,越来越诡异的语法,越来越诡异的内裤

【37】正如X楼所说,C++程序员跑到Linux上去了,为什么呢?作为C++忠实fans不想看到微软老是偏袒C#,仿佛C#是.Net儿子,而C++则是个即将要出嫁的女儿,C#倾注了众多微软牛人的心血和微软的基因,但是,远方的Linux家族仿佛看不惯微软这样欺负C++,在OS领域,Linux已经不是当年的小屁孩了,已经是正在茁壮成长的青壮年了,linux对C++一见钟情,Linux说出了自己的价值和时下的众多fans,Linux有着服务器市场得天独厚的条件不会这么轻易的退出江湖,相反,正在与Windows做终极PK。所以,C++是不会没落的,要没落也只能是VC++

【38】C++确实是一个情结!而且是一个很难抛却的情结。想着当初那个时候,时而用C++写出几个小巧儿高效的工具类,不厌其烦的学习C++的技巧,不厌其烦的看着Scott Meyers所著的Effective C++, 那个兴奋劲儿啦……可是呢 ,真正到了用的时候(脱开那些很少接触到的特定领域,比如说什么杀毒,什么驱动开发,说实话,有多少开发人员会真正涉足这些领域?),却又不得不做出取舍。要是用C++,就得做好思想准备,因为必定会遇到许多细节处理

【39】学C++的人越来越少了,那会C++的人就越来越珍贵了

【40】发表一下我的见解:我做c#两年多,很多高级特性都比较熟悉,包括泛型,线程池,异步等。但是到现在仍然不太清楚操作系统内部机制,感觉自己都是按微软定义的语法规则在做,所以我一直都有学习c++的打算,不为别的,就为理解微软设计这些语法背后的逻辑。打个比方,事件在c#里面是封装了消息机制的委托,说起来简单,但是恐怕只有做过delphi或者vc编程的才能理解到吧

【41】我用C/C++ 。
1. 在win桌面上,不是有人嫌MFC丑嘛, 那前台用Flash, 后台用C++
2. 在网络服务器领域,在UNIX/linux的地盘,是C/C++的天下, 原因是,linux基本当服务器和
 嵌入式用, 理所当然是C/C++, C管驱动, C++管应用
3. 在网络安全领域, 非C++莫属
4. 在网络游戏领域, 还是C++
5. 在杀毒软件领域,还是C++
6. 谁让你搞WEB应用的啊。 WEB应用方案那么多,就让搞C#, JAVA的争去吧。
7. 这个世界不都是桌面应用。 大量的嵌入式应用多是C做底层,C++做上层。
 通讯行业,电力行业,工控行业,电子行业到处都是嵌入式,到处都是C/C++
8. 你们只是在一个计算机小应用范围就争论得不可开交了。扬言C++不行了, 甚至
 妄想微软把.NET放入win的内核。 微软不会这么愚蠢。
 好吧,我们就看看桌面应用,前端吧。 打开你的电脑看软件:
 优化大师, QQ2009, 千千静听, protel, 迅雷, winrar, 超星阅读器, 卡巴斯基,
 chrome, maxthon, 暴风影音, CAD ..... 真实太多啦。 全是他妈的C++桌面应用!

【42】首次,如果有一天出现并普及能直接能运行MSIL或者Java字节码的CPU,那C++就真的没有生存空间了。操作系统都可以直接拿C#或者Java写了,问题是这一天有可能出现吗,至少在我的有生之年很难看到。。?确实在杂志上看过说.NET的程序跑的比C++跑的快的情况,当时记得专家的解释说C++频繁分配释放内存,造成了系统的内存的碎片,自己并没有遇到这种情况。可是C++是*的啊,你可以加入垃圾回收的功能啊,C++成熟的GC又不是没有。我们只能说C++在某些场合的开发效率和维护成本较高,因为他对程序员的要求比较高。
其次,C++接近底层,能让我们明白很多底层的知识,如数据结构,对象模型。你们觉的一个好的C++程序员如果转向C#或者Java困难吗?至少知道的是一些朋友在学习了C++之后,再回过头来看Java或者是C#,感觉明白了很多。
再次,C++开发项目,确实会将一部分经历拖到语言层次上,但是任何一个语言都不是完美的,如果你说它是,只能说它存在的时间很短,或者是它已经被框在了一个特定的领域里

【43】要说C#与JAVA的比对还差不多,或者说VisualC#与VC的比对还凑合.但要说C#与C++的比对,这好象没有什么可比的了. C#和JAVA都是来自C/C++,而且C是通行于几乎所有领域的工具语言,MS能比吗?更何况MS的万物C#

【44】最大的不同是C#/Java不能直接用指针,或者说不能直接对内存进行操作。C#只能通过引用进行间接操作,也就是说C#要进行两次地址查询而C++只用一次。理论上C#至少要比C++慢一倍。
【45】中国学编程的兄弟真的不算少,真正称的上精通的又有几个呢

【46】微软要往visual studio 2010里面给C++开发者更多关怀,
大概正是出于C++程序员很多都转向了linux的考虑

【47】用那些功能强大的库和傻瓜式语言,固然提高了生产力,但如果不学习和使用 汇编 ,C/C++ ,永远只是个软件民工,终其一生难有大成

【48】从学习的角度上来说C/C++是不错的,但是从工作的角度上来说,C井和Java都是不错的,现在的软件越来越庞大,不是以前追求性能的时代了,现在追求的是稳定性,还有伴随着网络时代,软件还要追求安全性。

【49】如果我做软件的话,我最理想的搭配是:后台核心处理用C,前台界面用C#,既有C的速度,又有C#的高效界面开发,C#可以比较好地和C结合起来(只用过几次,与C的结合能力再怎么也比不过C++),在C和C#的双重压迫之下,C++的使用量已经减少了,这点可以在****的语言排名上看出来,但是,想学C++的人不要因此而打消念头,因为学会了C++,基本再学C就没什么问题了,学C#也能很快上手,没有必要太在意什么灭亡之说,重要的是思想,语言只是工具

【50】其实就是几个c/c++的大牛,已经悟到c/c++的九阳神功+独孤九剑境界了,高处不胜寒,于是,闲来无事,写个java出来玩玩,领悟不了的人,可以给他们一个速成的武功练着. 可是没有想到这些拿着java,c#的人,以为自己学到了好了不起的武功,到处炫耀,以为自己天下第一了. 也幸好,那些得道的c/c++大牛已经不屑于此类了.其实我个人期望大家都去学java, c#,这样,我们这些c/c++的就更值钱,也更悠闲了

【51】C++系统级的语言
C#是应用级的语言
这注定C#是短命的,C++是长寿的甚至不死的
也注定C#开发应用软件是擅长的,C++开发系统软件是擅长的
所以不在于你要学什么,而是你想干什么,干啥用啥工具喽,犁地用耙子,吃饭用勺子
另外在于你想做开发做几年,想做个几年就学C#吧,想做的事就更长就学C++吧

【52】如果是纯做技术的,如果是真正的程序员,我想征服与成就比金钱能带来更多的快乐,或者说*能带来更多的快乐。所以我沉迷并沉醉于ASM、C、C++。我甚至想用VHDL或组合与时序电路来搭出自己的东西来。我为什么喜欢技术,是因为我无法适应现实世界,我更喜欢技术世界的*,输,我输的心服口服。语言是什么,包括他库吗,是语言强大,还是语言+库强大,那些JAVA或C#程序员,如果离开库,还那做些什么,如果加上内存或CPU的限制,他们还能做些什么。真正的程序员,我想是那些不依赖于库并能达成自己理想的人,用一种文字就能表达自己思想的人,我的思想,不需要引用,也能很好(完美)表达。
我也不想只在一种特定的场合(平台)里表达

【53】C++的强大再于它的复杂,他复杂,是因为他要强大。用C++可以写出用C才能写出的高效而精炼的代码,也可以写出更具抽象(面向对象,更符合现实世界)的代码。它灵活,是因为他复杂,他复杂,是因为他要灵活。
【54】我国为了结束信息技术无芯的历史,研制出了“龙芯”,但只是万里长征走出了第一步,后面是,语言,编译器,与库的问题,ASM、C、C++无疑将在我国的信息化进程中发挥距大的作用。(硬件要安全,语言与编译器要安全,库更要安全)。特别是绿色、环保、节能,要求我们的代码更为高效,精炼(在硬件条件一定的条件下,上面的要求只有靠代码来实现)。这些只能靠高效的语言来实现(非开发高效)。ASM、C、C++(并不等于VC、BCB)肯定能造就出我国未来伟大的程序员。JAVA,C#那些依赖于库的,所谓的“程序员”,只能继续做奴隶

【55】看看目前windows平台上的流行工具,包括游戏,多少不是用c/c++开发的 ?非windows平台和 嵌入式环境,哪个不是用 c/c++ ? 嵌入式操作系统,通用操作系统(linux,windows)哪个不是用 c/c++开发 ?楼主估计是仅仅守着微软这块田地,才说 c/c++几年内就如何的话吧。。真是无知者无畏。
看看国外 主流的招聘中 c/c++的差不多占了 60%多,人家那是上游产业,我们的程序都跑在人家构建的c/c++代码上,包括自以为是的 c#,当今软件世界,可以说是c/c++构建起来的,如果你不用它,只是说明你处于产业的末端,开发偏重劳动力型的代码,没什么技术含量的东西,目前中国大部分程序员是如此谋生,可叹啊

【56】虽然微软是世界上第一大的软件公司, 但是也请你们可能清楚C++不是微软的,也不是VC,甚至很多时候VC跟C++本身有所不同。C++在很多领域都有所应有, 我请问你C#可以在Linux,Unix下使用吗?Mac上可以用吗???同样VC++也不可以,但是C++语言本身是可以的

【57】ASM->C->C++->C#/java 说白了就是一层一层的封装而已

【58】c程序员都要把c++从自己队伍踢出去,c++程序员却想方设法的把c加进自己队伍来。
c程序员喜欢说c语言,c++程序员喜欢说c/c++语言

【59】C++非托管才是永恒的。
.NET带来了C++/C#托管,VISTA带来了WPF/SILVERLIGHT,WIN7还会带来新的技术。但是始终永恒的只有C++非托管。
微软的新技术,逐渐把程序员从应用层引诱到表现层,把代码变成脚本,把非托管偷梁换柱为托管,把肤浅的程序员变傻。

无数智能设备,小到手机,大到航空仪器,有几许使用WPF,又有几许使用非托管

【60】C#是商业公司产品。。
而C++是工业标准

【61】

c学基础
c++做深入研究
c#找工作

【62】学WINDOWS编程,无论使用C++或者C#,很难提升实力,很难发挥硬件的极限.windows编程入门简单,深入太难,微软对人的思想的束缚太大,windows编程只适合初学者,不适合追求*和极限的人。微软的软件思想很多都是商业造成的误区

【63】那些说c++做不了漂亮界面的人 是你们自己没能力 看看别人自己写的WTL界面库吧 一样的炫 所有的绘制全在自己掌握中 想要什么效果就什么效果
【64】C/C++的应用范畴还远不止楼主所说的那些.
单片机,嵌入式开发,linux底层,这些大量应用于航天,军事,卫星,高精尖设备驱动上.

C/C++是新生事物的最佳缔造工具,只有人类创意还在,C/C++就不会消亡的.

【65】C++/C就是开源大本营的脊梁。M$特地搞一个C++/CLI出来,其目的大部源于此,企图利用托管之利诱使广大C++/C阵营收归其帐下也,可谓有点白热化的气象,想撼动C++/C可不是那么容易的,可是那是块大肥肉、为兵家必争之要害,不得不争、不可不争

【转】C++的MFC,与C#的.NET,布布扣,bubuko.com

【转】C++的MFC,与C#的.NET

上一篇:学习Linux系列--Python资源收集


下一篇:javascript获取客户端默认打印机