c# - 语言选择 : C++ or C# for Windows Store app?

标签 c# c++ windows-runtime windows-store-apps c++-cx

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




我正在寻找关于哪种语言最好的一般意见。在许多考虑方面最好。

我在 C、C++ 和 Objective-C 方面有很强的背景。我对那些 3 感觉很舒服。我使用的 c# 很少。我在固件和中间件方面工作了十多年,最近开始涉足移动应用程序。主要是 iOS,但现在扩展到 Windows RT。

我即将为我公司的 Windows 应用商店(或 Metro,取决于你想怎么称呼它)编写一个版本。几个月前,我使用 C++/CX 做了一个概念验证。学习它几乎没有障碍(引用类的语法,以及大量使用命名空间),但那是过去的事了,我现在对此感到很舒服。

我发现的一些缺点是 .net 的大多数示例(MSDN 和私有(private))都在 c# 中,而在 c++ 中则较少。使用 c++ 回答有关 .net 框架的问题似乎也有点困难。大多数时候人们会发布一个 c# 答案,我需要将它移植到 c++ equiv。有时这很容易,有时更难。

我的问题是:值得我和我的公司花时间从 c# 重新开始而不是继续使用 c++ 吗?我需要学习 c#,但我不认为这是一个巨大的负担(实际上很期待)。一些担忧是:
* 获得更多工程师来处理此代码。我们公司很快就会发展壮大。会不会更容易找到懂 c# 和 MS 专门的 c++/cx 的工程师?
* 通过示例、文章和论坛轻松获得帮助。如果 c# 更常见,那将很有用。
* 3rd 方库之间的兼容性(似乎可以从任何主要语言使用 WinRT 组件)
* C# 相对于 C++ 的优势?他们都提供了这个应用程序所需的一切,至少我可以看到。 C#有哪些陷阱?
* c# 是否以与 C++/CX 相同的方式使用 continution/lambdas 进行异步编程?

还有其他我没有想到的优点/缺点吗?

你怎么看?另外,你有什么经验?你为什么支持你的答案?

最佳答案

C# 将拥有更好的在线支持(代码示例、问题答案)和更强大的工程师基础。我的意思是,在这种特定情况下,对于这种强烈依赖 Microsoft API 的软件开发。 Windows Store 在微软的整体战略中非常重要,而 C# 在他们的语言战略中比 C++ 更重要。因此,C# 是正确的选择,IMO。

*EDIT (Filip Skakun) 我知道重新提出这个问题可能很难,所以我不能单独回答,但我输入了所有可能有用的文本,所以我想我会在下面添加它:

当然,这由您决定,这可能是一个非常主观的选择,具体取决于您的信念,例如,如果您认为 C# 更高的潜在生产力和更好的工具和文档支持超过了更快、更接近于你已经知道的金属和(稍微主观地)更便携的 C++。 C++ 仍然几乎是基于 tiobe 索引的语言的两倍,因此吸引 C++ 开发人员可能比 C# 更容易。 C++/CX 是您只需要用于跨程序集通信和与 WinRT 库交谈的东西,但您编写的任何其他代码都应该根据所有专家的建议在标准 C++ 中完成。另请注意,C++/CX 不是托管语言,您不能将其与 .NET 一起使用。它在语法上与作为托管语言的 C++/CLI 非常相似。 WinRT 的好处是您可以根据需要或需要使用这两种语言。我将 C# 用于所有 XAML UI、网络、业务逻辑等。有大量示例用于将 C# 与 XAML 一起使用,而用于 C++ 的示例范围有限,因为它仅适用于并推荐用于带有 WinRT 的 XAML 平台。另一方面,对于任何较低级别的任务,例如处理 DirectX 或 CPU 密集型任务,我使用 C++,因为与直接 DirectX 相比,它的开源 .NET 包装器有更多的文档,并且当你想要挤出所有的CPU 的潜在功率或使用电池的最少能量。

C# 是比 C++ 更简洁的语言,标点符号更少,新的 async/await 关键字使异步调用(您必须在 Windows 8 应用程序中使用)更简洁。它也是一种托管语言,因此在大多数情况下,您可能不需要关心何时释放内存、缓冲区溢出等。调试 C# 代码比 C++ 产生更多确定性的结果(我只花了 2 天时间调试一些 C++ 代码,但我仍然没有'不知道我在找到错误方面走了多远)。维护遗留代码也更容易,因为调试要容易得多。

C++ 更快,因此它也使用更少的电池,您的应用程序将更快地启动并且可能使用更少的能量。如果您已经非常了解它,那么您可能比那些构建应用程序的托管开发人群更具优势。因为它不使用垃圾收集 - 内存管理更具确定性和轻量级,因此您的动画将更加流畅。

然后还有动机因素。如果你真的想学习 C# - 你可能会比你已经知道的语言更快乐、更有动力和更有效率地学习 C#,并且会很乐意花更多的时间来学习它,而不是你愿意花更多的时间来编写另一个 C++ 应用程序。

无论您使用哪种语言,底层 WinRT 库都是相同的,但 .NET 库仅在 .NET 代码中可用,而标准 C++ 库仅在 native 代码中可用。

最后——无论你做出什么决定——你总是可以混合使用两种语言。这可能会增加维护成本,因为将来维护代码的人可能需要了解两种语言,而且混合语言平台非常年轻,工具支持的程度略低(例如,您不能进行混合托管+ native 远程调试) 和可能更多的错误。出于我之前所说的原因,在许多情况下这是一个非常好的选择。

关于c# - 语言选择 : C++ or C# for Windows Store app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13885740/

相关文章:

c# - 如何通过 VSPackage 取消 ToolWindowPane 或 Visual Studio IDE 关闭操作?

python - C++ 和字符串连接分隔符

c++ - opencv mat扫描随机时间窃取

javascript - WinRT Javascript 应用程序中的 Google API OAuth 2.0

c# - 在 WinRT 应用程序中处理两个、三个、四个手指滑动手势

c# - 从 FieldInfo 获取对变量的引用

c# - 为什么我的窗口没有从我的线程更新?

c# - 在此上下文中仅支持原始类型或枚举类型

c++ - 为什么我的 DirectInput8 堆栈会溢出?

c# - WinRT 事件如何与 .NET 互操作