工控上位机软件开发过程中很多工程师使用C++(MFC)进行程序开发。甚至由于项目历史的原因,很多还在维护的项目还是使用VC6.0编写的。但由于.net的开源以及跨平台,现在工控上位机领域使用C#进行软件开发的人员也在逐渐增加,相关的招聘岗位对于C#的需求也越来越多。如果一个软件团队里面既有C++的开发人员,又有C#的开发人员,那么经常会有C++的开发人员会问:C#跟C++有什么区别?那么C#(WinForm)跟C++(MFC)有什么区别呢?下面列出笔者能想得到的几点,没有提到的欢迎大家留言补充。
1、C#开发的程序是基于.NetFramework的,是托管代码,由.Net运行时管理运行,运行前有一个二次编译的过程。
2、.NetFramework并没有将所有的WindowsAPI进行封装,且C#程序运行的时候是受运行时管理的,所以C#的底层能力没有那么强。对于没有封装的API,使用时需要使用到P-Invoke技术 。对于C++编写的库函数的调用也是使用的该技术。
3、C#开发的程序不用手动维护内存,注意这里说的内存指的是托管内存。C#编写的程序会涉及到两种不同的内存,一种是托管内存,一种是非托管内存,这两种内存都是分配在堆上。只不过托管内存由.net运行时管理,C#程序在使用完内存后不用去管它,运行时会帮我们处理这些不再使用的内存。 而非托管内存则需要程序自己去申请及释放,释放不及时同样会面临C++程序中遇到的内存泄漏的情况。
4、.net Framework提供了非常丰富的各种类库,不用自己从头开发,大大提高了开发的效率。而同样一个功能,使用C++开发则可能要借助一些第三方的库或自己实现。
5、WinForm界面框架也是对WindowsAPI的封装,其本质都是基于Windows的消息机制,这一点与MFC无异。只不过WinForm是后来者,设计理念会更先进一些,OOP(面向对象)思想会更完备,提供的UI设计器也更加的先进。直接结果就是Winform在界面开发过程中会更加的快捷。这也是经常有人说"C#开发界面很快"的一点原因。此外,MFC开发的项目基本上有对话框,单文档窗体,多文档窗体三种类型。而WinForm的项目则没有明显的界限,统一都是WinFrom桌面应用程序,当然WinForm也是支持多文档窗体的。
6、C#一般情况下不使用指针,需要使用的时候要在不安全代码中使用。
7、当然C++也有自己的强处,比如底层能力强(Dll HOOK,API拦截等更是非它莫属),比如执行效率高,是算法人员的最爱。关于执行效率这一点,微软官方也曾提过其实在有一些情况下C#的执行效率是比C++要高的。此外C++也特别适合做大型的桌面应用程序或一些系统级的服务中间件。 但是C++的语法复杂,入门难度比较大,刚开始接触可能没C#那么上手快。