跨平台项目中的C#与C++

Ton*_*ony 25 .net c# c++ qt frameworks

我的团队正计划开发一个最初针对Windows的应用程序,但最终将跨平台部署(Mac,Linux和可能的嵌入式设备).我们的决定是使用C#/ .NET还是通用C++(使用Qt作为用户界面库).我们预计通过使用C#,我们可以通过提高C++的生产力来更快地以更低的成本开发我们的产品,但是我们正在考虑C#的跨平台实现是否足够成熟.我们想要推广到其他平台的时候.

你们中任何遇到过类似情况的建议吗?

Pav*_*aev 40

尽管Mono具有所有潜在的跨平台功能,但对于跨平台目的,C++/Qt只是比C#/ WinForms或C#/ Gtk#更成熟的选择.通过使用更高级别的语言可以获得的任何生产力提升可能会被处理Mono的限制所抵消.

  • 我认为你的意思是Silverlight.您的原始陈述在事实上仍然是错误的,因为Microsoft从未发布过针对Linux的Silverlight.Moonlight不是MS项目. (24认同)
  • 惊人的技术变化有多快!事实上,在问题和答案提前三个星期,**微软发布了他们自己的独立C#/ .NET Framework实现的Mac和Linux**,其UI组件完全吹走了WinForms,Gtk#**和**Qt !不再需要担心Mono的局限性:拥有完整供应商支持的跨平台C#交互式应用程序现已成为现实. (2认同)
  • @Ray,什么?微软永远不会做那样的事情. (2认同)

小智 15

仁,我很担心你问题的措辞.

"我的团队正计划开发一个最初针对Windows的应用程序,但最终将部署在跨平台(Mac,Linux和可能的嵌入式设备)上."

该计划是否跨平台做?我可以推断,代码最初是针对Windows编写的,然后,可能会在稍后的某些时候花费精力来修改项目以实现跨平台功能.这不利于您的健康或团队的健康!这里需要做出明确的商业决策.跨平台开发的黄金法则之一是以绝对平等对待所有目标平台.

你可以在嵌入式环境中使用C#吗?它已经在商业上完成了吗?只是好奇.

"我们通过使用C#来预测这一点,我们可以更快地开发我们的产品,并且由于比C++提高了生产力,所以可以更快地开发我们的产品"你的意思是什么'预测'?你在做什么事实和数据这个预测?不要忘记,某些项目的编码工作量低至将产品推向市场所需总工作量的20%.因此,计算机语言的生产率比较问题可能并不那么重要.根据我的经验,在所谓的生产力标准上选择计算机语言并不高效.

"我们正在赌博"我同意这一点,赌博似乎与计划的含义相矛盾.问题是:有什么风险?

你考虑过国际化吗?

是的,我很挑剔但是为这个项目付钱的人可能会更加质疑.

书:C++中的跨平台开发:由Syd Logan构建MAC OS X,Linux和Windows应用程序 - ISBN 032124642X给出了所涉及问题的概念.

我使用C++/Qt参与了Windows,Mac和Linux的跨平台和国际化项目.后者适用于这两个问题.我对Qt的一个不同之处在于它不是成语中的现代C++,也不鼓励使用现代C++习语.就像MFC一样.


Mat*_*ieu 14

我用C++/Qt开发了多年的平板软件.
我强烈建议您使用此解决方案进行开发.
这样的解决方案为您带来所有平台的性能!
此外,Qt不仅是一个GUI框架,而且为您提供了一个完整的网络框架,数据库,I/O,强大的支持以及一个非常巧妙的国际化系统框架!
最后,Qt在它支持的所有平台上提供原生外观.

关于性能,Mono/C#是否相当于C++/Qt?


Hen*_*sel 12

问题的答案是:这取决于!(你的程序员在C#和C++中的技巧,如果他们在C#中真的快得多,等等).

只是备注:
Mono项目提供了一个平台(2.0版支持.NET 3.0),可以在Mac或Linux系统上使用.包括LINQ等微软代码糖.

  • @Bad Sector:您链接中的页面实际上描述了解决专利问题,或者如果未能显示现有技术使专利无用.如果他们不能解决它会发生什么?对于FOSS项目来说也许没问题,但是如果你正在开发和销售商业软件,那么这可能会带来财务成本.vfat专利有一个解决方法,但这并没有使TomTom不必支付Micrsoft迄今为止使用的费用.Mono有多少可能获得专利?微软可以向你收取多少费用?谁知道?使用C++/QT是否值得冒险? (4认同)
  • 从法律/专利角度来看,Mono的地位如何?假设情况:微软开始看到一个戏剧性的远离Windows操作系统,并发现一个关键因素是高品质的Mono + Linux平台.为了从操作系统中重新获得收入损失,微软要求商业软件供应商支付款项,因为他们使用Mono平台侵犯了专利权.顺便说一下,这也不是假设 - 考虑一下vfat文件系统发生了什么. (3认同)
  • 当我看到一个主要的商业玩家使用C#时,我会相信C#是跨平台的.注意程序和MP3播放器不计算在内. (2认同)

Dav*_*fal 8

我在许多跨平台项目中采用的方法是以非常便携的语言(C++)编写项目的"核心",然后实现UI(以及与操作系统相关的任何其他内容,例如某些类型的数据)访问)使用对各种平台上的任务有效的语言.

只想指出你不会只选择一种语言.


Rya*_*air 6

您是否只在所有平台上设置了一组UI代码?我鼓励你考虑两个具有共同核心的独立UI,实际上没有替代原生UI.

在这种情况下,您可以在C#中使用Winforms/WPF作为Windows UI,使用ObjC中的Cocoa作为OS X UI,使用C#中的GTK作为Linux UI.所有这些都将使用能够在Mono和.NET上运行的通用C#核心.Mono使用ObjC相对轻松.


Dav*_*ard 5

如果你想跨平台,C++肯定是要走的路.

编辑:我认为你应该根据你的项目选择你的语言,而不是喜欢一种语言,因为你只是习惯了它.虽然C#可能提供跨平台支持,但它最初设计为仅在Windows上运行.

Mark Maslar也有一个好处,根据您要开发的应用程序,基于Web的应用程序将完全独立于平台.

  • 我认为.NET只能在Windows上运行.微软对非Windows平台的支持非常有限,他们通常习惯于不鼓励人们运行任何其他东西(尽管他们喜欢从Mac上的Office获得的钱). (7认同)
  • C#和.NET通常不是设计为仅在Windows上运行.谁知道,在10到20年的时间里,C#和.NET的最佳实现将是Mono,即使在Windows上,每个人都将使用它.看看互联网资源管理器发生了什么,以及当IE没有更新,修复和创新很长一段时间后,Firefox如何获得动力.这在某种程度上很容易发生在.NET框架上. (5认同)
  • 请删除"C#很难跨越到UNIX".段.是错的. (3认同)
  • 使用Mono,您可以在Windows,Mac和Linux计算机上使用相同的代码. (2认同)
  • Mono有多成熟? (2认同)