繁体   English   中英

Visual C ++ / C#中的WinForms编程与Visual C ++(MFC)中的Windows编程有何不同

[英]How is WinForms programming in Visual C++/C# different from Windows programming in Visual C++(MFC)

Visual c ++ / c#中的winforms编程与Visual c ++(MFC)中的Windows编程有何不同?

我也想知道C#是否足够强大,可以像形式之外进行Windows编程。

我不确定是否有人可以对此问题提供一个答案,我只能尝试指出其中许多差异:

  • C#和C ++完全不同:内存管理,程序包结构,类布局,事件/代理,泛型/模板...即使编写非GUI应用程序在C ++和C#中也完全不同。 即使不是为GUI开发而设计的,C#语言的许多功能也非常有用。

  • 与MFC相比,Winforms具有很好的视觉设计器支持。 对于95%的所有应用程序,使用winforms可以使您的工作效率更高。 对于自定义控件(您自己或第三方)尤其如此

  • 另一方面,MFC提供了更多的框架支持(文档/视图结构等)。

  • 对于某些应用程序,MFC应用程序似乎响应更快。 在大多数情况下,可以优化Winform应用程序以使其具有相同的性能,但这要高于平均Winforms开发人员级别(通常低于MFC程序员的知识水平)。

  • MFC比Winforms更直接地封装WIN32 API。 在某些情况下,您甚至需要直接从winforms访问WIN32 API。 然后,如何做到这一点并不总是很清楚(也没有很好的记录)。 同样,典型的winforms程序员比MFC程序员对WIN32 API的了解更少,因此在这种情况下,他更有可能遇到麻烦。

  • 我认为Winforms得到了很好的支持,您可以实际解决所有GUI / NON-GUI任务。 对于大多数任务,编写C#程序会更容易。

我敢肯定,赞成/反对有更多的论据,我只是指出了我脑海中浮现的几个论点...

有一些明显的区别:

  • 最终,您将变得更加高效(.net)
  • 该语言可以帮助您避免犯很多常见错误(空指针,溢出,泄漏)
  • 该框架比MFC更干净(实际上我的意思是很多)
  • 本质上,您几乎可以做任何事情。 您需要通过直接Win32 DLL调用(或使用其他人制作的包装器或库)完成的最不常见的0.01%的事情

作为专业人士,我必须承认我更喜欢在任何WIN32 / Desktop开发中使用Delphi而不是C ++。 如果要构建作为客户端应用程序或独立应用程序的GUI应用程序,那么此时您可能会发现,Delphi(和C ++ Builder)具有比.NET更多的可视组件。 这是因为.NET在Web开发和服务应用程序中仍然更加流行。

这并不意味着Delphi(或C ++)比.NET更强大,因为.NET在GUI应用程序级别上正在迅速发展。 WPF / Silverlight将为开发人员带来许多新的可能性。

许多人仍将Delphi / C ++用于WIN32的另一个原因是,他们仍然有很多旧代码。 其中一些代码已经使用了十多年,只需要额外的维护。 用C#/。NET重写这些项目太昂贵了。 人们正在考虑这一点,但是现有代码已经证明了自己。 新代码将引入新的错误。

使用C#,您将不会进行Windows开发。 您正在进行.NET开发,.NET的某些部分将允许您使用Windows功能。 但是,.NET类的主要部分实际上是Windows API的包装,这使使用这些功能更加容易。 但是,并非所有内容都已经在.NET中实现,因此仍然需要完成许多工作。

.NET开发的危险就是我所说的“ .NET Hell”。 引入.NET时,人们说这将结束困扰Windows上所有C ++开发人员的DLL Hell。 好吧,它确实终止了DLL Hell,只是将其替换为.NET Hell,在该版本中,同一程序集的多个版本仍然会引起很多问题。 因此,在这方面,没有太大变化。 您仍然取决于特定库的特定运行时版本(尤其是第三方库),因此这里没有真正的收获。

我仍然非常喜欢.NET开发,这主要是因为越来越多的应用程序作为服务(SAAS)运行,而不是老式的桌面应用程序。 基本上,您只需要一个Web浏览器即可使用这些应用程序,因此对某些硬件要求的依赖性降低了。 .NET开发的真正优势就在这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM