[英]About “GUI in C# and code in C++”
首先,直到现在,我所有的编程教育都以控制台应用程序为目标,就像每个开始学习C和C ++的人一样。 (我知道2种语言)现在,我想跳到漂亮的图形世界。
因此,我正在探索Windows窗体,试图了解它使用的语言(与本机C ++完全不同)时,我已经头疼不已,但是我设法完成了一些事情,例如使用文本框和按钮。
嗯,事实是,我读过很多地方,为了避免在尝试用C ++编写Winform时出现头痛,我最好“用C#来构建GUI,因为它更容易,而且逻辑和C ++都可以。 ”。 这就是我的问题,我完全不理解该声明。 那是什么意思?
同样,C#与C ++类似,是要确认该语句吗? 原因是,如果C#与C ++太不同,我将不得不学习整个C#语言
希望你理解我的怀疑。
PD:对我的英语不好说。
琼(Joan),虽然当然可以用C#开发应用程序前端,也可以用C ++编写逻辑,但我相信这样做会浪费很多精力,因为您只会使自己复杂化而没有真正的好处,因为您可以同时编写这两种代码用相同的语言。
与C ++相比,C#具有许多优点,而且我个人主要使用C#,但是我可以清楚地看到许多喜欢C ++的程序员。
现在进入有关C ++和C#之间相似性的问题,答案是肯定的。 是的,因为C#的语法显然是从C ++派生的。 诸如ifs和for循环之类的许多东西都是完全相同的,因此,如果您知道如何用C ++编写if,则可以用C#编写。
区别(也是最关键的区别)在于语言的工作方式。 C ++是严格编译的语言(从C ++代码到机器代码)。 C#是一种解释型语言(它从c#到MSIL,在运行时到机器代码)。 在C#中,如果未明确允许,则不能使用指针算法;在C ++中,可以(并且将)使用指针算法。 C#具有垃圾回收,而C ++没有。
最后,正如我在第一段中所述,您可以使用两种语言来构建应用程序,但这将非常复杂。 我的建议是学习一些C#,然后确定要使用哪种语言来构建GUI应用程序。 但是,即使有那么一秒钟,也不要相信C ++不能用于构建前端,因为有许多框架可以使用它。 我从脑海中记得的是Qt 。
您的另一个选择是使用“ C ++ / CLI”,它是可以使用.NET Framework的C ++风格(C#使用相同的框架)
编辑:感谢杰里指出托管C ++已过时,而C ++ / CLI是其中之一!
C#具有花括号,分号,并使用类的概念。 它具有“ C派生”语法,但与C ++非常不同。 Java实际上是C#的前身,而不是C ++。
您可以使用C#构建应用程序GUI,然后使用各种调用C ++的方法(例如P / Invoke)。 除非您正在使用大量现有的库,或者正在寻找绝对的性能,否则它将是一件令人头疼的事情。
如果要查找使用C ++的现代Windows GUI的示例,请查看Hilo示例程序。
切换到新语言并不是很困难。 您必须学习的几个关键字不是问题。 如果要适应新环境和类库,将花费最多的精力。 那可能就是您的意思,这是事实,您将需要一些时间。
现在进入C#中的拆分GUI和C ++中的代码,然后,例如,如果有缓冲区和字符串,则必须进行所有绑定和参数编组。 我认为这不会使您的生活更轻松。 与本地Dll的接口会变得有些痛苦。 但是,如果您使用第三方dll,并且已经具有较大的工作代码库,则可以尝试启用/clr
来编译逻辑代码。 这将生成一个可直接在.NET内部使用的DLL。
注意:WinForms现在对于新应用程序已经过时,请考虑改用WPF。 它可以很好地扩展,但是对于新手来说学习曲线可能会很陡。
好吧,这不是直接的答案,但希望能对您有所帮助。 既然您已经说过了, 那么您才刚刚开始,并且想要将C ++与GUI结合使用 ,建议您看一下Qt 。 IMO我发现Qt
简化了C ++和GUI。 也很好。
尽管这并不是对您所提问题的直接回答,但我首先要警告WinForms基本上已经是死胡同了,因此对于新代码,最好避免使用它们。 如果要在.NET中进行GUI,则当前首选的选择是WPF。
有些人发现C#是做GUI的简便方法。 毫无疑问,Microsoft提供了更多的向导方式,并且如果您使用.NET来完成此工作,则几乎不需要编写任何代码。 其他人(尤其是那些有更多这样做经验的人)可以使用C ++迅速(或什至更多)生成C ++ GUI。
这样的混合语言在相对较大的项目中可以很好地工作,在该项目中您拥有完全独立的团队,在不同部分工作。 对于通常由同一人在两个部分上工作的较小的项目,语法上的差异仅在可能的最坏的水平上出现-差异不大,无法真正换档并以不同的方式思考,但是差异仍然很大,您不能仅仅计划输入内容并希望将其编译。 总而言之,选择一种语言并坚持使用通常会好得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.