mag*_*gol 46 .net c# c++ mfc visual-c++
我的同事正在使用Visual Studio 2002并使用C++ MFC.我正在用C#开发.
它之前没有任何问题,但现在质疑我们的客户是否真的应该在不同的环境中发展.我的同事们(当然)认为我应该转向C++ MFC.我认为他们可以使用.NET而不是MFC.
有没有理由学习MFC?感觉有点过时了,还是我错了?与MFC相比,针对.NET和.NET的争论是什么?
编辑:
我们正在为核工业开发过程系统和辅助应用.主要应用程序是模拟旧计算机系统并使用C++/MFC的模拟器.它是非常关键的时间,也许它应该仍然是原生C++中的核心.但是仿真器和所有周围应用程序的GUI并不是特别关键.
您是否应该更换现有的MFC应用程序?
Sha*_*ane 84
我已经在很长一段时间内广泛使用了MFC和Windows Forms.我来自视频游戏行业,因此多年来不得不编写许多桌面应用程序,而在.net之前,MFC非常有用.甚至在此之前我就是在纯Win32中编写工具.
MFC肯定有它的怪癖,但总的来说它让生活变得更加轻松.将OpenGL和Direct3D集成到自定义视图中非常容易,一旦掌握了它,编写自定义控件就是小菜一碟.最重要的是,我可以用纯C++编写代码,这恰好是我选择的语言.另外,我发现MFC非常高效和活泼.
渐渐地,MFC开始获得外部控制库支持,特别是对接/工具库库,所以我的工具,如3D模型查看器和关卡编辑器,看起来都非常可爱.
我编写的大多数应用程序都以编程方式创建了UI,因此对话框/窗口布局工具足以满足我的需求.
MFC 9也非常酷,尤其是Microsoft作为Feature Pack的一部分发布的Ribbon控件/扩展库.所以老狗还有生命,当然!:)
当.net 1.0问世时,我发现转换相当容易,因为它支持托管C++.它并不漂亮,但为.net框架提供了一个相对简单的入口.但是当我开始编写需要Windows Forms Designer的工具时,我的转折点出现在.net 2.0的时候.我决定重新开始学习C#,我喜欢它 - 尽管我永远不会习惯在没有delete()的情况下使用new();).然后我开始编写用户控件,发现整个体验非常好而且直截了当..net框架非常庞大,得到了很好的支持,通常我发现C#/ .net中的所有内容都更容易.另外,编译很快,并且在Visual Studio中重构的能力非常棒.
c#/ .net的美妙之处在于它不会限制您只使用托管代码编写.如果性能是一个问题,或者您需要在平台之间共享代码,您仍然可以使用非托管代码.例如,我的数学库是用C/C++编写的,我将它放入一个库中,使C#能够包装/使用相同的代码,尽管这只是暂时的.我要及时将这些库移植到C#,所以一切都是纯粹的.net.
我想提到的最后一次经历是,我过去几个月一直在远离控制台游戏编程,并花时间编程InterWeb.我一直在使用Microsoft堆栈,在ASP.net/C#中编程,我不得不说它非常好,所有C#的知识都可以直接应用.唯一的学习曲线是ASP.net,而不是语言和支持库.随着.net 3.5(LINQ很好)的到来,.net框架中的C#生活很可爱.
无论如何,我不想把它变成我生活中的故事,但我只想简单介绍一下那些已经了解了你所提出的所有技术的人.我还想提一下,尝试不同的语言/框架对你有好处.我已经为iPhone编写了一年的编码,并且已经发展到非常喜欢Objective-C.这都是编程,而且一切都很好.
关于MFC/.net,两者都有它们的优点和缺点,我真的不介意MFC,但是在前进方面,我可能会坚持使用C#/ .net,但请,请,请了解它是如何工作的.我要说的唯一有说服力的事情就是要了解.net中的记忆是如何工作的,即使"它都是为你照顾的";)
你对C/C++的了解应该完全独立于你是否使用MFC,它仍然是一种关键语言(特别是在基于控制台的视频游戏编程中),但对于Windows上的桌面应用程序编程,它越来越难以反对.净.它快速,简单,具有出色的工具支持,优秀的第三方库,庞大的社区,现在是跨平台(Mono),可以让您在所有当前/新兴的Microsoft技术之间移动(ASP.net,WPF,Silverlight,WCF)等等).
但是,对于所有这些,我仍然将Visual Studio设置为C++环境.有些习惯永远不会死;)
Jer*_*fin 40
MFC和.NET处于几乎相反的极端,每个都以自己的方式彻底蹩脚.
使用MFC大致就是生活在第二次世界大战剩余建筑物的腐朽残骸中.没有任何迹象可以警告危险区域,并且可能没有立即明白在哪里可以找到自来水,电力或厕所 - 即使所有这些都在那里,如果你知道如何找到它们.像任何腐朽的建筑一样,墙壁上有很多洞,所以你可以随时随地离开.同样地,从外部世界拖入东西也很容易,尽管你可以通过"拖动"来实现这一目标.
使用.NET就像生活在The Truman Show上一样.它符合一个人对现实生活应该是什么样的想法.在其边界内,生活似乎是乌托邦式的.然而,最后,它只不过是一个令人愉快的监狱牢房,而且它所描绘的生活都不是真实的.你与外界的所有互动都受到导演的一时兴起,导演的目的主要是提高自己的收视率; 只有在影响他的情况下才会考虑您的福利.
与大多数监狱不同,.NET确实有一个标记清晰的逃生路线(标记为"P/Invoke").然而,就像从任何好监狱逃生的路线一样,它是一英里长的污水管.大多数居民都知道它的存在,但几乎唯一去过那里的人是青少年证明他们的男子气概.实际使用的少数人只是在极其必要的情况下这样做.我们这些经常发现必要的人已经意识到最好只留在外面而不是回去.
编辑:由于有些人想要在每个人的背面使用圆圈和箭头以及一个段落作为法庭证据:MFC的优点和缺点在于它主要是围绕API的相当薄的包装.这是一个弱点,因为它的覆盖范围内存在相当多的漏洞,并且因为它在API本身不能很好地融合在一起的地方"平滑"相对较少.例如,如果某些东西是使用COM实现的,那么它通常会直接显示在使用它的代码中.这是一种优势,因为将MFC扩展到处理默认情况下的区域非常容易,并且只需绕过它并在需要时直接使用API.它也经常被更新,因此虽然它目前可以产生合理的"现代"外观应用程序,但情况并非总是如此.鉴于其历史,很难预测它将继续如此.
.NET的优点和缺点在于它是一个围绕API的"更厚"的包装器.它在API中的"平滑"差异方面做得更多,因此(例如)在COM中实现的部件与直接C函数调用实现的部件看起来/行为明显不同.从.NET内部,差异消失了..NET是(目前)微软最受欢迎的技术,因此它更加定期更新,并且可以更好地确保您的UI遵循最新的指南.我的猜测是,它比MFC更有可能在一段时间内继续这样做.
.NET的弱点是绕过或扩展要困难得多.基本上,你通往外界的唯一途径是通过P/Invoke.即使是小型短途旅行,它也是丑陋和痛苦的.试图经常使用它或任何接近主要延伸的东西都是受虐狂的练习.
如果(几乎)您编写的所有内容都适合.NET支持,那么这是明确的选择.只要你留在它的边界内,它就会更清洁,更顺畅.
如果您编写的代码经常需要超出框架支持的范围,MFC可能会更好地为您工作.使用.NET,.NET模型适用于整个程序.使用MFC,编写使用MFC作为UI的程序相对容易,并且可以根据MFC不支持的任何其他内容执行操作.
Mat*_*vis 25
我认为知道C++是有价值的,因为语言将会存在很长时间.你永远不知道何时可能需要用C++进行编程,而在今天的就业市场中,拥有更多语言只会增强你的简历.
至于MFC,我正在尽力摆脱它.计算标准已经过时了(我认为接近20年),但微软仍然认为通过新版本和功能包支持它的价值.从这个角度来看,我怀疑MFC会很快消失.但这并不意味着我想用它编程.一个人可以在C#中编程的流动性和易用性使得MFC/C++的每一天都能脱离MFC/C++.线程,套接字,字符串操作等 - 所有这些事情在C#中比在C++中更容易实现.此外,C#/.NET是微软的主要技术重点,在职业发展方面,我宁愿在MFC背后也是如此.