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

Posted

技术标签:

【中文标题】Visual C++/C# 中的 WinForms 编程与 Visual C++(MFC) 中的 Windows 编程有何不同【英文标题】:How is WinForms programming in Visual C++/C# different from Windows programming in Visual C++(MFC) 【发布时间】:2009-08-18 11:03:18 【问题描述】:

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

我还想知道 C# 是否足够强大,可以像其他形式一样进行 Windows 编程。

【问题讨论】:

【参考方案1】:

我不确定是否有人可以对这个问题给出一个单一的答案,我可以尝试指出其中的一些差异:

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

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

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

对于某些应用程序,MFC 应用程序的响应速度可能更快。在大多数情况下,可以优化一个 winform 应用程序以获得相同的性能,但这高于平均 winforms 开发人员水平(通常低于 MFC 程序员的知识水平)。

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

我认为 winforms 得到了很好的支持,您几乎可以解决所有 GUI/非 GUI 任务。对于大多数任务,编写 C# 程序会更容易。

我敢肯定,赞成/反对的论点要多得多,我只是注意到了我脑海中浮现的少数……

【讨论】:

【参考方案2】:

有一些显着的区别:

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

【讨论】:

非常感谢 这意味着对于一个真正的新手来说,学习 c# 开发比学习 MFC 更好 是的,当然...对于新人来说,.Net 确实是最明智的选择。【参考方案3】:

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

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

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

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

.NET 开发的危险就是我喜欢称之为的“.NET 地狱”。当 .NET 被引入时,人们说它将结束困扰 Windows 上每个 C++ 开发人员的 DLL 地狱。好吧,它确实结束了 DLL 地狱,只是将其替换为 .NET 地狱,同一程序集的多个版本仍然能够导致很多问题。所以,在这方面,没有什么太大的变化。您仍然依赖于特定库的某个运行时版本(尤其是第三方库),因此这里没有真正的收获。

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

【讨论】:

以上是关于Visual C++/C# 中的 WinForms 编程与 Visual C++(MFC) 中的 Windows 编程有何不同的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 .Net/WinForms 应用程序仅在 Visual Studio 中获得跨线程异常? [复制]

重命名列表视图中的项目c#WinForms

csharp 阻止在Visual Studio for Winforms Apps中的设计时执行代码

在Visual Studio Designer中找不到自定义字体的C#文件

适用于 .Net Core 3.1 的 Visual Studio 2019 中的 WinForms 设计器窗口

c#Winforms中的分层树视图,带有大陆,国家,城市