C# 将拥有更好的在线支持(代码示例、问题答案)和更强大的工程师基础。我的意思是,在这种特定情况下,对于这种强烈依赖 Microsoft API 的软件开发。Windows Store 在微软的整体战略中非常重要,而 C# 在他们的语言战略中比 C++ 更重要。因此,C# 是正确的选择,IMO。
*EDIT (Filip Skakun) 我知道重新提出这个问题可能很难,所以我不能单独回答,但我输入了所有可能有用的文本,所以我想我会在下面添加它:
当然,这由您决定,这可能是一个非常主观的选择,具体取决于您的信念,例如,如果您认为 C# 更高的潜在生产力和更好的工具和文档支持超过了更快、更接近于你已经知道的金属和(稍微主观地)更便携的 C++。根据 tiobe 索引,C++ 的流行度仍然几乎是一门语言的两倍,因此吸引 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# 与 XAML 结合使用的示例,而用于 C++ 的示例范围有限,因为它仅适用于并推荐用于具有 WinRT 的 XAML 平台。另一方面,对于任何较低级别的任务,例如处理 DirectX 或 CPU 密集型任务,我使用 C++,因为与直接 DirectX 相比,它的开源 .NET 包装器有更多的文档,并且当你想要挤出所有的CPU 的潜在功率或使用电池的最少能量。有大量用于将 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++ 库仅在本机代码中可用。
最后——无论你做出什么决定——你总是可以混合使用两种语言。这可能会增加维护成本,因为将来维护代码的人可能需要了解两种语言,而且混合语言平台非常年轻,工具支持的程度略低(例如,您不能进行混合托管+本机远程调试) 和可能更多的错误。出于我之前所说的原因,在许多情况下这是一个非常好的选择。